refactor: move visibility computation to foundkey-js
Changelog: Changed
This commit is contained in:
parent
d434343a09
commit
17fa488eb9
5 changed files with 28 additions and 22 deletions
|
@ -97,7 +97,7 @@ const props = withDefaults(defineProps<{
|
||||||
mention?: foundkey.entities.User;
|
mention?: foundkey.entities.User;
|
||||||
specified?: foundkey.entities.User;
|
specified?: foundkey.entities.User;
|
||||||
initialText?: string;
|
initialText?: string;
|
||||||
initialVisibility?: typeof foundkey.noteVisibilities;
|
initialVisibility?: foundkey.NoteVisibility;
|
||||||
initialFiles?: foundkey.entities.DriveFile[];
|
initialFiles?: foundkey.entities.DriveFile[];
|
||||||
initialLocalOnly?: boolean;
|
initialLocalOnly?: boolean;
|
||||||
initialVisibleUsers?: foundkey.entities.User[];
|
initialVisibleUsers?: foundkey.entities.User[];
|
||||||
|
@ -134,7 +134,7 @@ let useCw = $ref(false);
|
||||||
let showPreview = $ref(false);
|
let showPreview = $ref(false);
|
||||||
let cw = $ref<string | null>(null);
|
let cw = $ref<string | null>(null);
|
||||||
let localOnly = $ref<boolean>(props.initialLocalOnly ?? defaultStore.state.defaultNoteLocalOnly);
|
let localOnly = $ref<boolean>(props.initialLocalOnly ?? defaultStore.state.defaultNoteLocalOnly);
|
||||||
let visibility = $ref(props.initialVisibility ?? defaultStore.state.defaultNoteVisibility as typeof foundkey.noteVisibilities[number]);
|
let visibility = $ref(props.initialVisibility ?? defaultStore.state.defaultNoteVisibility as foundkey.NoteVisibility);
|
||||||
let visibleUsers = $ref([]);
|
let visibleUsers = $ref([]);
|
||||||
if (props.initialVisibleUsers) {
|
if (props.initialVisibleUsers) {
|
||||||
props.initialVisibleUsers.forEach(pushVisibleUser);
|
props.initialVisibleUsers.forEach(pushVisibleUser);
|
||||||
|
@ -144,21 +144,6 @@ let hasNotSpecifiedMentions = $ref(false);
|
||||||
let recentHashtags = $ref(JSON.parse(localStorage.getItem('hashtags') || '[]'));
|
let recentHashtags = $ref(JSON.parse(localStorage.getItem('hashtags') || '[]'));
|
||||||
let imeText = $ref('');
|
let imeText = $ref('');
|
||||||
|
|
||||||
// TODO: compat with misskey-js, should likely be moved into foundkey-js
|
|
||||||
const visibilityScore = (a: string): number => {
|
|
||||||
switch (a) {
|
|
||||||
case 'specified':
|
|
||||||
return 0;
|
|
||||||
case 'followers':
|
|
||||||
return 1;
|
|
||||||
case 'home':
|
|
||||||
return 2;
|
|
||||||
case 'public': default:
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const minVisibility = (a: string, b: string): string => visibilityScore(b) > visibilityScore(a) ? a : b;
|
|
||||||
|
|
||||||
const typing = throttle(3000, () => {
|
const typing = throttle(3000, () => {
|
||||||
if (props.channel) {
|
if (props.channel) {
|
||||||
stream.send('typingOnChannel', { channel: props.channel.id });
|
stream.send('typingOnChannel', { channel: props.channel.id });
|
||||||
|
@ -271,7 +256,7 @@ if (props.channel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.reply) {
|
if (props.reply) {
|
||||||
visibility = minVisibility(props.reply.visibility, visibility);
|
visibility = foundkey.minVisibility(props.reply.visibility, visibility);
|
||||||
if (visibility === 'specified') {
|
if (visibility === 'specified') {
|
||||||
os.api('users/show', {
|
os.api('users/show', {
|
||||||
userIds: props.reply.visibleUserIds.filter(uid => uid !== $i.id && uid !== props.reply.userId),
|
userIds: props.reply.visibleUserIds.filter(uid => uid !== $i.id && uid !== props.reply.userId),
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app'] as const;
|
export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app'] as const;
|
||||||
|
|
||||||
export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as const;
|
|
||||||
|
|
||||||
export const mutedNoteReasons = ['word', 'manual', 'spam', 'other'] as const;
|
export const mutedNoteReasons = ['word', 'manual', 'spam', 'other'] as const;
|
||||||
|
|
||||||
export const ffVisibility = ['public', 'followers', 'private'] as const;
|
export const ffVisibility = ['public', 'followers', 'private'] as const;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { NoteVisibility } from './visibility.js';
|
||||||
|
|
||||||
export type ID = string;
|
export type ID = string;
|
||||||
export type DateString = string;
|
export type DateString = string;
|
||||||
|
|
||||||
|
@ -138,7 +140,7 @@ export type Note = {
|
||||||
renoteId: Note['id'];
|
renoteId: Note['id'];
|
||||||
files: DriveFile[];
|
files: DriveFile[];
|
||||||
fileIds: DriveFile['id'][];
|
fileIds: DriveFile['id'][];
|
||||||
visibility: 'public' | 'home' | 'followers' | 'specified';
|
visibility: NoteVisibility;
|
||||||
visibleUserIds?: User['id'][];
|
visibleUserIds?: User['id'][];
|
||||||
localOnly?: boolean;
|
localOnly?: boolean;
|
||||||
myReaction?: string;
|
myReaction?: string;
|
||||||
|
|
|
@ -2,10 +2,14 @@ export { Endpoints } from './api.types.js';
|
||||||
export { default as Stream, Connection as ChannelConnection } from './streaming.js';
|
export { default as Stream, Connection as ChannelConnection } from './streaming.js';
|
||||||
export { Channels } from './streaming.types.js';
|
export { Channels } from './streaming.types.js';
|
||||||
export { Acct } from './acct.js';
|
export { Acct } from './acct.js';
|
||||||
|
export {
|
||||||
|
noteVisibilities,
|
||||||
|
NoteVisibility,
|
||||||
|
minVisibility,
|
||||||
|
} from './visibility.js';
|
||||||
export {
|
export {
|
||||||
permissions,
|
permissions,
|
||||||
notificationTypes,
|
notificationTypes,
|
||||||
noteVisibilities,
|
|
||||||
mutedNoteReasons,
|
mutedNoteReasons,
|
||||||
ffVisibility,
|
ffVisibility,
|
||||||
} from './consts.js';
|
} from './consts.js';
|
||||||
|
|
17
packages/foundkey-js/src/visibility.ts
Normal file
17
packages/foundkey-js/src/visibility.ts
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* Possible visibilities of notes.
|
||||||
|
* Ordered most public first.
|
||||||
|
*/
|
||||||
|
export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as const;
|
||||||
|
|
||||||
|
export type NoteVisibility = typeof noteVisibilities[number];
|
||||||
|
|
||||||
|
export function minVisibility(a: NoteVisibility, b: NoteVisibility): NoteVisibility {
|
||||||
|
return noteVisibilities[
|
||||||
|
// larger index means more private, so pick the largest index
|
||||||
|
Math.max(
|
||||||
|
noteVisibilities.indexOf(a),
|
||||||
|
noteVisibilities.indexOf(b),
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue