diff --git a/packages/frontend/src/pages/user-list-timeline.vue b/packages/frontend/src/pages/user-list-timeline.vue
index dd0b7fb67..b2d52b013 100644
--- a/packages/frontend/src/pages/user-list-timeline.vue
+++ b/packages/frontend/src/pages/user-list-timeline.vue
@@ -11,10 +11,12 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -32,6 +34,9 @@ import { misskeyApi } from '@/scripts/misskey-api.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import { i18n } from '@/i18n.js';
import { useRouter } from '@/router/supplier.js';
+import { defaultStore } from '@/store.js';
+import { deepMerge } from '@/scripts/merge.js';
+import * as os from '@/os.js';
const router = useRouter();
@@ -43,6 +48,21 @@ const list = ref(null);
const queue = ref(0);
const tlEl = shallowRef>();
const rootEl = shallowRef();
+const withRenotes = computed({
+ get: () => defaultStore.reactiveState.tl.value.filter.withRenotes,
+ set: (x) => saveTlFilter('withRenotes', x),
+});
+const onlyFiles = computed({
+ get: () => defaultStore.reactiveState.tl.value.filter.onlyFiles,
+ set: (x) => saveTlFilter('onlyFiles', x),
+});
+
+function saveTlFilter(key: keyof typeof defaultStore.state.tl.filter, newValue: boolean) {
+ if (key !== 'withReplies' || $i) {
+ const out = deepMerge({ filter: { [key]: newValue } }, defaultStore.state.tl);
+ defaultStore.set('tl', out);
+ }
+}
watch(() => props.listId, async () => {
list.value = await misskeyApi('users/lists/show', {
@@ -63,6 +83,20 @@ function settings() {
}
const headerActions = computed(() => list.value ? [{
+ icon: 'ph-dots-three ph-bold ph-lg',
+ text: i18n.ts.options,
+ handler: (ev) => {
+ os.popupMenu([{
+ type: 'switch',
+ text: i18n.ts.showRenotes,
+ ref: withRenotes,
+ }, {
+ type: 'switch',
+ text: i18n.ts.fileAttachedOnly,
+ ref: onlyFiles,
+ }], ev.currentTarget ?? ev.target);
+ },
+}, {
icon: 'ph-gear ph-bold ph-lg',
text: i18n.ts.settings,
handler: settings,
diff --git a/packages/frontend/src/ui/deck/list-column.vue b/packages/frontend/src/ui/deck/list-column.vue
index 128562823..f7988ed1b 100644
--- a/packages/frontend/src/ui/deck/list-column.vue
+++ b/packages/frontend/src/ui/deck/list-column.vue
@@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ column.name }}
-
+
@@ -29,6 +29,7 @@ const props = defineProps<{
const timeline = shallowRef>();
const withRenotes = ref(props.column.withRenotes ?? true);
+const onlyFiles = ref(props.column.onlyFiles ?? false);
if (props.column.listId == null) {
setList();
@@ -40,6 +41,12 @@ watch(withRenotes, v => {
});
});
+watch(onlyFiles, v => {
+ updateColumn(props.column.id, {
+ onlyFiles: v,
+ });
+});
+
async function setList() {
const lists = await misskeyApi('users/lists/list');
const { canceled, result: list } = await os.select({
@@ -75,5 +82,10 @@ const menu = [
text: i18n.ts.showRenotes,
ref: withRenotes,
},
+ {
+ type: 'switch',
+ text: i18n.ts.fileAttachedOnly,
+ ref: onlyFiles,
+ },
];