diff options
| author | anatawa12 <anatawa12@icloud.com> | 2024-07-30 20:13:00 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-30 20:13:00 +0900 |
| commit | fccc5b6d620ca6893a0a5649ea9f0d0693727b3b (patch) | |
| tree | 7a613ef5c02b33faaf8a764044ede7abf3ea342a /packages/frontend/src/timelines.ts | |
| parent | フォロー中のユーザーに関する"TLに他の人への返信を含... (diff) | |
| download | misskey-fccc5b6d620ca6893a0a5649ea9f0d0693727b3b.tar.gz misskey-fccc5b6d620ca6893a0a5649ea9f0d0693727b3b.tar.bz2 misskey-fccc5b6d620ca6893a0a5649ea9f0d0693727b3b.zip | |
frontend timeline fixes & improvements (#13727)
* fix: withRepliesがオフのときにwithFilesのとぐるをいじれない問題
* fix: type errors in tl-column
* fix: deck uiでタイムラインを切り替えた際にTLの設定項目が更新されない
* refactor: タイムラインの各種知識を一つのファイルに統合
fix: ウィジェットのタイムライン選択欄に表示できないタイムラインが表示される
* docs(changelog): timeline improvements
* fix: missing license header
* chore: timeline > basic timeline
* use BasicTimelineType in deck-store
* Update CHANGELOG.md
---------
Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/timelines.ts')
| -rw-r--r-- | packages/frontend/src/timelines.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/frontend/src/timelines.ts b/packages/frontend/src/timelines.ts new file mode 100644 index 0000000000..3ef95fd272 --- /dev/null +++ b/packages/frontend/src/timelines.ts @@ -0,0 +1,56 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { $i } from '@/account.js'; +import { instance } from '@/instance.js'; + +export const basicTimelineTypes = [ + 'home', + 'local', + 'social', + 'global', +] as const; + +export type BasicTimelineType = typeof basicTimelineTypes[number]; + +export function isBasicTimeline(timeline: string): timeline is BasicTimelineType { + return basicTimelineTypes.includes(timeline as BasicTimelineType); +} + +export function basicTimelineIconClass(timeline: BasicTimelineType): string { + switch (timeline) { + case 'home': + return 'ti ti-home'; + case 'local': + return 'ti ti-planet'; + case 'social': + return 'ti ti-universe'; + case 'global': + return 'ti ti-whirl'; + } +} + +export function isAvailableBasicTimeline(timeline: BasicTimelineType | undefined | null): boolean { + switch (timeline) { + case 'home': + return $i != null; + case 'local': + return ($i == null && instance.policies.ltlAvailable) || ($i != null && $i.policies.ltlAvailable); + case 'social': + return $i != null && instance.policies.ltlAvailable; + case 'global': + return ($i == null && instance.policies.gtlAvailable) || ($i != null && $i.policies.gtlAvailable); + default: + return false; + } +} + +export function availableBasicTimelines(): BasicTimelineType[] { + return basicTimelineTypes.filter(isAvailableBasicTimeline); +} + +export function hasWithReplies(timeline: BasicTimelineType | undefined | null): boolean { + return timeline === 'local' || timeline === 'social'; +} |