fix(PinDMs): display properly when there are 0 unpinned dms (#2281)
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
		
							parent
							
								
									60f6678107
								
							
						
					
					
						commit
						650f4050e1
					
				
					 3 changed files with 22 additions and 21 deletions
				
			
		|  | @ -53,7 +53,7 @@ function useCategory(categoryId: string | null, initalChannelId: string | null) | ||||||
|             setCategory({ |             setCategory({ | ||||||
|                 id: Toasts.genId(), |                 id: Toasts.genId(), | ||||||
|                 name: `Pin Category ${categories.length + 1}`, |                 name: `Pin Category ${categories.length + 1}`, | ||||||
|                 color: 10070709, |                 color: DEFAULT_COLOR, | ||||||
|                 collapsed: false, |                 collapsed: false, | ||||||
|                 channels: [initalChannelId] |                 channels: [initalChannelId] | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/Co | ||||||
| import { Menu } from "@webpack/common"; | import { Menu } from "@webpack/common"; | ||||||
| 
 | 
 | ||||||
| import { addChannelToCategory, canMoveChannelInDirection, categories, isPinned, moveChannel, removeChannelFromCategory } from "../data"; | import { addChannelToCategory, canMoveChannelInDirection, categories, isPinned, moveChannel, removeChannelFromCategory } from "../data"; | ||||||
| import { forceUpdate, settings } from "../index"; | import { forceUpdate, PinOrder, settings } from "../index"; | ||||||
| import { openCategoryModal } from "./CreateCategoryModal"; | import { openCategoryModal } from "./CreateCategoryModal"; | ||||||
| 
 | 
 | ||||||
| function createPinMenuItem(channelId: string) { | 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) && ( | ||||||
|                             <Menu.MenuItem |                             <Menu.MenuItem | ||||||
|                                 id="move-up" |                                 id="move-up" | ||||||
|                                 label="Move Up" |                                 label="Move Up" | ||||||
|  | @ -62,7 +62,7 @@ function createPinMenuItem(channelId: string) { | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     { |                     { | ||||||
|                         !settings.store.sortDmsByNewestMessage && canMoveChannelInDirection(channelId, 1) && ( |                         settings.store.pinOrder === PinOrder.Custom && canMoveChannelInDirection(channelId, 1) && ( | ||||||
|                             <Menu.MenuItem |                             <Menu.MenuItem | ||||||
|                                 id="move-down" |                                 id="move-down" | ||||||
|                                 label="Move Down" |                                 label="Move Down" | ||||||
|  |  | ||||||
|  | @ -34,11 +34,19 @@ const PrivateChannelSortStore = findStoreLazy("PrivateChannelSortStore") as { ge | ||||||
| export let instance: any; | export let instance: any; | ||||||
| export const forceUpdate = () => instance?.props?._forceUpdate?.(); | export const forceUpdate = () => instance?.props?._forceUpdate?.(); | ||||||
| 
 | 
 | ||||||
|  | export const enum PinOrder { | ||||||
|  |     LastMessage, | ||||||
|  |     Custom | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export const settings = definePluginSettings({ | export const settings = definePluginSettings({ | ||||||
|     sortDmsByNewestMessage: { |     pinOrder: { | ||||||
|         type: OptionType.BOOLEAN, |         type: OptionType.SELECT, | ||||||
|         description: "Sort DMs by newest message", |         description: "Which order should pinned DMs be displayed in?", | ||||||
|         default: false, |         options: [ | ||||||
|  |             { label: "Most recent message", value: PinOrder.LastMessage, default: true }, | ||||||
|  |             { label: "Custom (right click channels to reorder)", value: PinOrder.Custom } | ||||||
|  |         ], | ||||||
|         onChange: () => forceUpdate() |         onChange: () => forceUpdate() | ||||||
|     }, |     }, | ||||||
| 
 | 
 | ||||||
|  | @ -61,11 +69,6 @@ export default definePlugin({ | ||||||
|         { |         { | ||||||
|             find: ".privateChannelsHeaderContainer,", |             find: ".privateChannelsHeaderContainer,", | ||||||
|             replacement: [ |             replacement: [ | ||||||
|                 // Init
 |  | ||||||
|                 { |  | ||||||
|                     match: /(?<=componentDidMount\(\){).{1,100}scrollToChannel/, |  | ||||||
|                     replace: "$self._instance = this;$&" |  | ||||||
|                 }, |  | ||||||
|                 { |                 { | ||||||
|                     // Filter out pinned channels from the private channel list
 |                     // Filter out pinned channels from the private channel list
 | ||||||
|                     match: /(?<=\i,{channels:\i,)privateChannelIds:(\i)/, |                     match: /(?<=\i,{channels:\i,)privateChannelIds:(\i)/, | ||||||
|  | @ -164,12 +167,15 @@ export default definePlugin({ | ||||||
|     getSections, |     getSections, | ||||||
|     getAllUncollapsedChannels, |     getAllUncollapsedChannels, | ||||||
|     requireSettingsMenu, |     requireSettingsMenu, | ||||||
|  | 
 | ||||||
|     makeProps(instance, { sections }: { sections: number[]; }) { |     makeProps(instance, { sections }: { sections: number[]; }) { | ||||||
|  |         this._instance = instance; | ||||||
|         this.sections = sections; |         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) { |         if (this.instance?.props?.privateChannelIds?.length === 0) { | ||||||
|  |             // dont render direct messages header
 | ||||||
|             this.sections[this.sections.length - 1] = 0; |             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; |         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) { |     isCategoryIndex(sectionIndex: number) { | ||||||
|         return this.sections && sectionIndex > 0 && sectionIndex < this.sections.length - 1; |         return this.sections && sectionIndex > 0 && sectionIndex < this.sections.length - 1; | ||||||
|     }, |     }, | ||||||
|  | @ -211,7 +213,7 @@ export default definePlugin({ | ||||||
|         if (settings.store.dmSectioncollapsed && sectionIndex !== 0) |         if (settings.store.dmSectioncollapsed && sectionIndex !== 0) | ||||||
|             return true; |             return true; | ||||||
|         const cat = categories[sectionIndex - 1]; |         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() { |     isDMSectioncollapsed() { | ||||||
|  | @ -219,7 +221,6 @@ export default definePlugin({ | ||||||
|     }, |     }, | ||||||
| 
 | 
 | ||||||
|     collapseDMList() { |     collapseDMList() { | ||||||
|         // console.log("HI");
 |  | ||||||
|         settings.store.dmSectioncollapsed = !settings.store.dmSectioncollapsed; |         settings.store.dmSectioncollapsed = !settings.store.dmSectioncollapsed; | ||||||
|         forceUpdate(); |         forceUpdate(); | ||||||
|     }, |     }, | ||||||
|  | @ -350,7 +351,7 @@ export default definePlugin({ | ||||||
|     getCategoryChannels(category: Category) { |     getCategoryChannels(category: Category) { | ||||||
|         if (category.channels.length === 0) return []; |         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)); |             return PrivateChannelSortStore.getPrivateChannelIds().filter(c => category.channels.includes(c)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue