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:
Syncx 2024-03-29 07:40:47 +11:00 committed by GitHub
parent 60f6678107
commit 650f4050e1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 22 additions and 21 deletions

View file

@ -34,11 +34,19 @@ const PrivateChannelSortStore = findStoreLazy("PrivateChannelSortStore") as { ge
export let instance: any;
export const forceUpdate = () => 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));
}