diff --git a/src/plugins/pinDms/components/CreateCategoryModal.tsx b/src/plugins/pinDms/components/CreateCategoryModal.tsx index 309ca69f..06e1c356 100644 --- a/src/plugins/pinDms/components/CreateCategoryModal.tsx +++ b/src/plugins/pinDms/components/CreateCategoryModal.tsx @@ -53,7 +53,7 @@ function useCategory(categoryId: string | null, initalChannelId: string | null) setCategory({ id: Toasts.genId(), name: `Pin Category ${categories.length + 1}`, - color: 10070709, + color: DEFAULT_COLOR, collapsed: false, channels: [initalChannelId] }); diff --git a/src/plugins/pinDms/components/contextMenu.tsx b/src/plugins/pinDms/components/contextMenu.tsx index 0f5a198b..f2bf9fae 100644 --- a/src/plugins/pinDms/components/contextMenu.tsx +++ b/src/plugins/pinDms/components/contextMenu.tsx @@ -8,7 +8,7 @@ import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/Co import { Menu } from "@webpack/common"; import { addChannelToCategory, canMoveChannelInDirection, categories, isPinned, moveChannel, removeChannelFromCategory } from "../data"; -import { forceUpdate, settings } from "../index"; +import { forceUpdate, PinOrder, settings } from "../index"; import { openCategoryModal } from "./CreateCategoryModal"; function createPinMenuItem(channelId: string) { @@ -52,7 +52,7 @@ function createPinMenuItem(channelId: string) { /> { - !settings.store.sortDmsByNewestMessage && canMoveChannelInDirection(channelId, -1) && ( + settings.store.pinOrder === PinOrder.Custom && canMoveChannelInDirection(channelId, -1) && ( instance?.props?._forceUpdate?.(); +export const enum PinOrder { + LastMessage, + Custom +} + export const settings = definePluginSettings({ - sortDmsByNewestMessage: { - type: OptionType.BOOLEAN, - description: "Sort DMs by newest message", - default: false, + pinOrder: { + type: OptionType.SELECT, + description: "Which order should pinned DMs be displayed in?", + options: [ + { label: "Most recent message", value: PinOrder.LastMessage, default: true }, + { label: "Custom (right click channels to reorder)", value: PinOrder.Custom } + ], onChange: () => forceUpdate() }, @@ -61,11 +69,6 @@ export default definePlugin({ { find: ".privateChannelsHeaderContainer,", replacement: [ - // Init - { - match: /(?<=componentDidMount\(\){).{1,100}scrollToChannel/, - replace: "$self._instance = this;$&" - }, { // Filter out pinned channels from the private channel list match: /(?<=\i,{channels:\i,)privateChannelIds:(\i)/, @@ -164,12 +167,15 @@ export default definePlugin({ getSections, getAllUncollapsedChannels, requireSettingsMenu, + makeProps(instance, { sections }: { sections: number[]; }) { + this._instance = instance; this.sections = sections; - this.sections.splice(1, 0, ...this.getPinCount(instance.props.privateChannelIds || [])); + this.sections.splice(1, 0, ...this.getSections()); if (this.instance?.props?.privateChannelIds?.length === 0) { + // dont render direct messages header this.sections[this.sections.length - 1] = 0; } @@ -199,10 +205,6 @@ export default definePlugin({ return (sectionHeaderSizePx + sections.reduce((acc, v) => acc += v + 44, 0) + DEFAULT_CHUNK_SIZE) * 1.5; }, - getPinCount(channelIds: string[]) { - return channelIds.length ? this.getSections() : []; - }, - isCategoryIndex(sectionIndex: number) { return this.sections && sectionIndex > 0 && sectionIndex < this.sections.length - 1; }, @@ -211,7 +213,7 @@ export default definePlugin({ if (settings.store.dmSectioncollapsed && sectionIndex !== 0) return true; const cat = categories[sectionIndex - 1]; - return this.isCategoryIndex(sectionIndex) && (cat.channels.length === 0 || cat?.channels[channelIndex]); + return this.isCategoryIndex(sectionIndex) && (cat?.channels?.length === 0 || cat?.channels[channelIndex]); }, isDMSectioncollapsed() { @@ -219,7 +221,6 @@ export default definePlugin({ }, collapseDMList() { - // console.log("HI"); settings.store.dmSectioncollapsed = !settings.store.dmSectioncollapsed; forceUpdate(); }, @@ -350,7 +351,7 @@ export default definePlugin({ getCategoryChannels(category: Category) { if (category.channels.length === 0) return []; - if (settings.store.sortDmsByNewestMessage) { + if (settings.store.pinOrder === PinOrder.LastMessage) { return PrivateChannelSortStore.getPrivateChannelIds().filter(c => category.channels.includes(c)); }