Browse Source

Fix starting multiselect from grouped documents

master
morethanwords 3 years ago
parent
commit
44a915a31c
  1. 13
      src/components/chat/selection.ts
  2. 12
      src/components/sidebarRight/tabs/editChat.ts
  3. 50
      src/components/sidebarRight/tabs/groupPermissions.ts
  4. 40
      src/pages/pageIm.ts

13
src/components/chat/selection.ts

@ -35,6 +35,7 @@ import isInDOM from "../../helpers/dom/isInDOM";
import { randomLong } from "../../helpers/random"; import { randomLong } from "../../helpers/random";
import { attachContextMenuListener } from "../misc"; import { attachContextMenuListener } from "../misc";
import { attachClickEvent, AttachClickOptions } from "../../helpers/dom/clickEvent"; import { attachClickEvent, AttachClickOptions } from "../../helpers/dom/clickEvent";
import findUpAsChild from "../../helpers/dom/findUpAsChild";
const accumulateMapSet = (map: Map<number, Set<number>>) => { const accumulateMapSet = (map: Map<number, Set<number>>) => {
return [...map.values()].reduce((acc, v) => acc + v.size, 0); return [...map.values()].reduce((acc, v) => acc + v.size, 0);
@ -136,6 +137,8 @@ class AppSelection {
const slice = elements.slice(firstIndex + 1, lastIndex); const slice = elements.slice(firstIndex + 1, lastIndex);
console.log('getElementsBetween', first, last, slice, firstIndex, lastIndex, isHigher);
return slice; return slice;
}; };
@ -190,8 +193,16 @@ class AppSelection {
seenSet.add(mid); seenSet.add(mid);
if((selecting && !isSelected) || (!selecting && isSelected)) { if((selecting && !isSelected) || (!selecting && isSelected)) {
const seenLength = accumulateMapSet(seen);
if(this.toggleByElement && checkBetween) { if(this.toggleByElement && checkBetween) {
if(seenLength < 2) {
if(findUpAsChild(element, firstTarget)) {
firstTarget = element;
}
}
const elementsBetween = getElementsBetween(firstTarget, element); const elementsBetween = getElementsBetween(firstTarget, element);
console.log(elementsBetween);
if(elementsBetween.length) { if(elementsBetween.length) {
elementsBetween.forEach(element => { elementsBetween.forEach(element => {
processElement(element, false); processElement(element, false);
@ -200,7 +211,7 @@ class AppSelection {
} }
if(!this.selectedMids.size) { if(!this.selectedMids.size) {
if(accumulateMapSet(seen) === 2 && this.toggleByMid) { if(seenLength === 2 && this.toggleByMid) {
for(const [peerId, mids] of seen) { for(const [peerId, mids] of seen) {
for(const mid of mids) { for(const mid of mids) {
this.toggleByMid(peerId, mid); this.toggleByMid(peerId, mid);

12
src/components/sidebarRight/tabs/editChat.ts

@ -255,8 +255,7 @@ export default class AppEditChatTab extends SliderSuperTab {
if(!isBroadcast && appChatsManager.hasRights(this.chatId, 'change_permissions')) { if(!isBroadcast && appChatsManager.hasRights(this.chatId, 'change_permissions')) {
const showChatHistoryCheckboxField = new CheckboxField({ const showChatHistoryCheckboxField = new CheckboxField({
text: 'ChatHistory', text: 'ChatHistory',
withRipple: true, withRipple: true
checked: !(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory
}); });
this.listenerSetter.add(showChatHistoryCheckboxField.input)('change', () => { this.listenerSetter.add(showChatHistoryCheckboxField.input)('change', () => {
@ -266,9 +265,12 @@ export default class AppEditChatTab extends SliderSuperTab {
}); });
}); });
addChatUpdateListener(() => { const onChatUpdate = () => {
showChatHistoryCheckboxField.setValueSilently(!(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory); showChatHistoryCheckboxField.setValueSilently(isChannel && !(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory);
}); };
onChatUpdate();
addChatUpdateListener(onChatUpdate);
section.content.append(showChatHistoryCheckboxField.label); section.content.append(showChatHistoryCheckboxField.label);
} }

50
src/components/sidebarRight/tabs/groupPermissions.ts

@ -288,26 +288,42 @@ export default class AppGroupPermissionsTab extends SliderSuperTabEventable {
}; };
let exceptionsCount = 0; let exceptionsCount = 0;
const LOAD_COUNT = 50; let loader: ScrollableLoader;
const loader = new ScrollableLoader({ const setLoader = () => {
scrollable: this.scrollable, const LOAD_COUNT = 50;
getPromise: () => { loader = new ScrollableLoader({
return appProfileManager.getChannelParticipants(this.chatId, {_: 'channelParticipantsBanned', q: ''}, LOAD_COUNT, list.childElementCount).then(res => { scrollable: this.scrollable,
for(const participant of res.participants) { getPromise: () => {
add(participant as ChannelParticipant.channelParticipantBanned, true); return appProfileManager.getChannelParticipants(this.chatId, {_: 'channelParticipantsBanned', q: ''}, LOAD_COUNT, list.childElementCount).then(res => {
} for(const participant of res.participants) {
add(participant as ChannelParticipant.channelParticipantBanned, true);
exceptionsCount = res.count; }
setLength();
exceptionsCount = res.count;
return res.participants.length < LOAD_COUNT || res.count === list.childElementCount; setLength();
});
} return res.participants.length < LOAD_COUNT || res.count === list.childElementCount;
}); });
}
});
return loader.load();
};
this.scrollable.append(section.container); this.scrollable.append(section.container);
await loader.load(); if(appChatsManager.isChannel(this.chatId)) {
await setLoader();
} else {
setLength();
this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {
if(this.chatId === migrateFrom) {
this.chatId = migrateTo;
setLoader();
}
});
}
} }
} }

40
src/pages/pageIm.ts

@ -32,26 +32,28 @@ let onFirstMount = () => {
return loadFonts().then(() => { return loadFonts().then(() => {
return new Promise<void>((resolve) => { return new Promise<void>((resolve) => {
window.requestAnimationFrame(() => { window.requestAnimationFrame(() => {
const promise = import('../lib/appManagers/appDialogsManager'); // setTimeout(() => {
promise.finally(async() => { const promise = import('../lib/appManagers/appDialogsManager');
//alert('pageIm!'); promise.finally(async() => {
resolve(); //alert('pageIm!');
resolve();
//AudioContext && global.navigator && global.navigator.mediaDevices && global.navigator.mediaDevices.getUserMedia && global.WebAssembly;
//AudioContext && global.navigator && global.navigator.mediaDevices && global.navigator.mediaDevices.getUserMedia && global.WebAssembly;
/* // @ts-ignore
var AudioContext = globalThis.AudioContext || globalThis.webkitAudioContext; /* // @ts-ignore
alert('AudioContext:' + typeof(AudioContext)); var AudioContext = globalThis.AudioContext || globalThis.webkitAudioContext;
// @ts-ignore alert('AudioContext:' + typeof(AudioContext));
alert('global.navigator:' + typeof(navigator)); // @ts-ignore
alert('navigator.mediaDevices:' + typeof(navigator.mediaDevices)); alert('global.navigator:' + typeof(navigator));
alert('navigator.mediaDevices.getUserMedia:' + typeof(navigator.mediaDevices?.getUserMedia)); alert('navigator.mediaDevices:' + typeof(navigator.mediaDevices));
alert('global.WebAssembly:' + typeof(WebAssembly)); */ alert('navigator.mediaDevices.getUserMedia:' + typeof(navigator.mediaDevices?.getUserMedia));
alert('global.WebAssembly:' + typeof(WebAssembly)); */
//(Array.from(document.getElementsByClassName('rp')) as HTMLElement[]).forEach(el => ripple(el));
}); //(Array.from(document.getElementsByClassName('rp')) as HTMLElement[]).forEach(el => ripple(el));
});
// }, 5e3);
}); });
}); })
}); });
//let promise = /* Promise.resolve() */.then(() => {//import('../lib/services').then(services => { //let promise = /* Promise.resolve() */.then(() => {//import('../lib/services').then(services => {

Loading…
Cancel
Save