use of createRef instead of not working { corrent: xxx }

This commit is contained in:
Jan Prochazka
2021-03-17 18:20:26 +01:00
parent 321d5d71de
commit 9c7df42948
9 changed files with 73 additions and 39 deletions

View File

@@ -177,6 +177,7 @@
import axiosInstance from '../utility/axiosInstance'; import axiosInstance from '../utility/axiosInstance';
import { copyTextToClipboard } from '../utility/clipboard'; import { copyTextToClipboard } from '../utility/clipboard';
import invalidateCommands from '../commands/invalidateCommands'; import invalidateCommands from '../commands/invalidateCommands';
import createRef from '../utility/createRef';
export let onLoadNextData = undefined; export let onLoadNextData = undefined;
export let grider = undefined; export let grider = undefined;
@@ -416,15 +417,15 @@
domFocusField.focus(); domFocusField.focus();
} }
const lastPublishledRef = { current: '' }; const lastPublishledRef = createRef('');
$: if (onSelectionChanged) { $: if (onSelectionChanged) {
const published = getCellsPublished(selectedCells); const published = getCellsPublished(selectedCells);
const stringified = stableStringify(published); const stringified = stableStringify(published);
if (lastPublishledRef.current != stringified) { if (lastPublishledRef.get() != stringified) {
// console.log('PUBLISH', published); // console.log('PUBLISH', published);
// console.log('lastPublishledRef.current', lastPublishledRef.current); // console.log('lastPublishledRef.current', lastPublishledRef.current);
// console.log('stringified', stringified); // console.log('stringified', stringified);
lastPublishledRef.current = stringified; lastPublishledRef.set(stringified);
onSelectionChanged(published); onSelectionChanged(published);
} }
} }

View File

@@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
import keycodes from '../utility/keycodes'; import keycodes from '../utility/keycodes';
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import createRef from '../utility/createRef';
export let inplaceEditorState; export let inplaceEditorState;
export let dispatchInsplaceEditor; export let dispatchInsplaceEditor;
@@ -12,29 +13,29 @@
const widthCopy = width; const widthCopy = width;
const isChangedRef = { current: !!inplaceEditorState.text }; const isChangedRef = createRef(!!inplaceEditorState.text);
function handleKeyDown(event) { function handleKeyDown(event) {
switch (event.keyCode) { switch (event.keyCode) {
case keycodes.escape: case keycodes.escape:
isChangedRef.current = false; isChangedRef.set(false);
dispatchInsplaceEditor({ type: 'close' }); dispatchInsplaceEditor({ type: 'close' });
break; break;
case keycodes.enter: case keycodes.enter:
if (isChangedRef.current) { if (isChangedRef.get()) {
// grider.setCellValue(rowIndex, uniqueName, editor.value); // grider.setCellValue(rowIndex, uniqueName, editor.value);
onSetValue(domEditor.value); onSetValue(domEditor.value);
isChangedRef.current = false; isChangedRef.set(false);
} }
domEditor.blur(); domEditor.blur();
dispatchInsplaceEditor({ type: 'close', mode: 'enter' }); dispatchInsplaceEditor({ type: 'close', mode: 'enter' });
break; break;
case keycodes.s: case keycodes.s:
if (event.ctrlKey) { if (event.ctrlKey) {
if (isChangedRef.current) { if (isChangedRef.get()) {
onSetValue(domEditor.value); onSetValue(domEditor.value);
// grider.setCellValue(rowIndex, uniqueName, editor.value); // grider.setCellValue(rowIndex, uniqueName, editor.value);
isChangedRef.current = false; isChangedRef.set(false);
} }
event.preventDefault(); event.preventDefault();
dispatchInsplaceEditor({ type: 'close', mode: 'save' }); dispatchInsplaceEditor({ type: 'close', mode: 'save' });
@@ -44,10 +45,10 @@
} }
function handleBlur() { function handleBlur() {
if (isChangedRef.current) { if (isChangedRef.get()) {
onSetValue(domEditor.value); onSetValue(domEditor.value);
// grider.setCellValue(rowIndex, uniqueName, editor.value); // grider.setCellValue(rowIndex, uniqueName, editor.value);
isChangedRef.current = false; isChangedRef.set(false);
} }
dispatchInsplaceEditor({ type: 'close' }); dispatchInsplaceEditor({ type: 'close' });
} }
@@ -63,7 +64,7 @@
<input <input
type="text" type="text"
on:change={() => (isChangedRef.current = true)} on:change={() => isChangedRef.set(true)}
on:keydown={handleKeyDown} on:keydown={handleKeyDown}
on:blur={handleBlur} on:blur={handleBlur}
bind:this={domEditor} bind:this={domEditor}

View File

@@ -1,4 +1,6 @@
<script lang="ts"> <script lang="ts">
import createRef from '../utility/createRef';
import DataGridCore from './DataGridCore.svelte'; import DataGridCore from './DataGridCore.svelte';
export let loadDataPage; export let loadDataPage;
@@ -17,8 +19,8 @@
let errorMessage = null; let errorMessage = null;
let domGrid; let domGrid;
const loadNextDataRef = { current: false }; const loadNextDataRef = createRef(false);
const loadedTimeRef = { current: null }; const loadedTimeRef = createRef(null);
export function resetLoadedAll() { export function resetLoadedAll() {
isLoadedAll = false; isLoadedAll = false;
@@ -32,17 +34,17 @@
async function loadNextData() { async function loadNextData() {
if (isLoading) return; if (isLoading) return;
loadNextDataRef.current = false; loadNextDataRef.set(false);
isLoading = true; isLoading = true;
const loadStart = new Date().getTime(); const loadStart = new Date().getTime();
// await new Promise(resolve => setTimeout(resolve, 5000)); // await new Promise(resolve => setTimeout(resolve, 5000));
loadedTimeRef.current = loadStart; loadedTimeRef.set(loadStart);
// console.log('LOAD NEXT ROWS', loadedRows); // console.log('LOAD NEXT ROWS', loadedRows);
const nextRows = await loadDataPage($$props, loadedRows.length, 100); const nextRows = await loadDataPage($$props, loadedRows.length, 100);
if (loadedTimeRef.current !== loadStart) { if (loadedTimeRef.get() !== loadStart) {
// new load was dispatched // new load was dispatched
return; return;
} }
@@ -68,7 +70,7 @@
// })); // }));
} }
if (loadNextDataRef.current) { if (loadNextDataRef.get()) {
loadNextData(); loadNextData();
} }
// console.log('LOADED', nextRows, loadedRows); // console.log('LOADED', nextRows, loadedRows);
@@ -93,7 +95,7 @@
isLoadedAll = false; isLoadedAll = false;
loadedTime = new Date().getTime(); loadedTime = new Date().getTime();
errorMessage = null; errorMessage = null;
loadNextDataRef.current = false; loadNextDataRef.set(false);
// loadNextDataToken = 0; // loadNextDataToken = 0;
} }

View File

@@ -10,6 +10,7 @@
<script lang="ts"> <script lang="ts">
import FormFieldTemplateLarge from '../modals/FormFieldTemplateLarge.svelte'; import FormFieldTemplateLarge from '../modals/FormFieldTemplateLarge.svelte';
import createRef from '../utility/createRef';
import keycodes from '../utility/keycodes'; import keycodes from '../utility/keycodes';
@@ -24,15 +25,15 @@
values, values,
template, template,
setFieldValue, setFieldValue,
submitActionRef: { current: null }, submitActionRef: createRef(null),
}; };
setContext(contextKey, context); setContext(contextKey, context);
function handleEnter(e) { function handleEnter(e) {
if (e.keyCode == keycodes.enter && context.submitActionRef.current) { if (e.keyCode == keycodes.enter && context.submitActionRef.get()) {
e.preventDefault(); e.preventDefault();
context.submitActionRef.current(values); context.submitActionRef.get()(values);
} }
} }
</script> </script>

View File

@@ -12,9 +12,9 @@
dispatch('click', $values); dispatch('click', $values);
} }
submitActionRef.current = () => { submitActionRef.set(() => {
handleClick(); handleClick();
}; });
</script> </script>
<FormStyledButton type="submit" on:click={handleClick} {...$$props} /> <FormStyledButton type="submit" on:click={handleClick} {...$$props} />

View File

@@ -13,27 +13,28 @@
import ModalBase from './ModalBase.svelte'; import ModalBase from './ModalBase.svelte';
import { closeCurrentModal, closeModal } from './modalTools'; import { closeCurrentModal, closeModal } from './modalTools';
import createRef from '../utility/createRef';
export let connection; export let connection;
let isTesting; let isTesting;
let sqlConnectResult; let sqlConnectResult;
const testIdRef = { current: 0 }; const testIdRef = createRef(0);
async function handleTest(e) { async function handleTest(e) {
isTesting = true; isTesting = true;
testIdRef.current += 1; testIdRef.update(x => x + 1);
const testid = testIdRef.current; const testid = testIdRef.get();
const resp = await axiosInstance.post('connections/test', e.detail); const resp = await axiosInstance.post('connections/test', e.detail);
if (testIdRef.current != testid) return; if (testIdRef.get() != testid) return;
isTesting = false; isTesting = false;
sqlConnectResult = resp.data; sqlConnectResult = resp.data;
} }
function handleCancelTest() { function handleCancelTest() {
testIdRef.current += 1; // invalidate current test testIdRef.update(x => x + 1); // invalidate current test
isTesting = false; isTesting = false;
} }

View File

@@ -15,6 +15,7 @@
import SocketMessageView from '../query/SocketMessageView.svelte'; import SocketMessageView from '../query/SocketMessageView.svelte';
import { currentArchive, extensions, selectedWidget } from '../stores'; import { currentArchive, extensions, selectedWidget } from '../stores';
import axiosInstance from '../utility/axiosInstance'; import axiosInstance from '../utility/axiosInstance';
import createRef from '../utility/createRef';
import openNewTab from '../utility/openNewTab'; import openNewTab from '../utility/openNewTab';
import socket from '../utility/socket'; import socket from '../utility/socket';
import useEffect from '../utility/useEffect'; import useEffect from '../utility/useEffect';
@@ -33,7 +34,7 @@
export let openedFile = undefined; export let openedFile = undefined;
export let importToArchive = false; export let importToArchive = false;
const refreshArchiveFolderRef = { current: null }; const refreshArchiveFolderRef = createRef(null);
$: targetArchiveFolder = importToArchive ? `import-${moment().format('YYYY-MM-DD-hh-mm-ss')}` : $currentArchive; $: targetArchiveFolder = importToArchive ? `import-${moment().format('YYYY-MM-DD-hh-mm-ss')}` : $currentArchive;
@@ -54,10 +55,10 @@
const handleRunnerDone = () => { const handleRunnerDone = () => {
busy = false; busy = false;
if (refreshArchiveFolderRef.current) { if (refreshArchiveFolderRef.get()) {
axiosInstance.post('archive/refresh-folders', {}); axiosInstance.post('archive/refresh-folders', {});
axiosInstance.post('archive/refresh-files', { folder: refreshArchiveFolderRef.current }); axiosInstance.post('archive/refresh-files', { folder: refreshArchiveFolderRef.get() });
$currentArchive = refreshArchiveFolderRef.current; $currentArchive = refreshArchiveFolderRef.get();
$selectedWidget = 'archive'; $selectedWidget = 'archive';
} }
}; };
@@ -87,9 +88,9 @@
runnerId = runid; runnerId = runid;
if (values.targetStorageType == 'archive') { if (values.targetStorageType == 'archive') {
refreshArchiveFolderRef.current = values.targetArchiveFolder; refreshArchiveFolderRef.set(values.targetArchiveFolder);
} else { } else {
refreshArchiveFolderRef.current = null; refreshArchiveFolderRef.set(null);
} }
}; };

View File

@@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
import _ from 'lodash'; import _ from 'lodash';
import ErrorInfo from '../elements/ErrorInfo.svelte'; import ErrorInfo from '../elements/ErrorInfo.svelte';
import createRef from '../utility/createRef';
import socket from '../utility/socket'; import socket from '../utility/socket';
@@ -13,16 +14,16 @@
export let eventName; export let eventName;
export let executeNumber; export let executeNumber;
const cachedMessagesRef = { current: [] }; const cachedMessagesRef = createRef([]);
let displayedMessages = []; let displayedMessages = [];
const displayCachedMessages = _.throttle(() => { const displayCachedMessages = _.throttle(() => {
displayedMessages = [...cachedMessagesRef.current]; displayedMessages = [...cachedMessagesRef.get()];
}, 500); }, 500);
const handleInfo = info => { const handleInfo = info => {
cachedMessagesRef.current.push(info); cachedMessagesRef.get().push(info);
displayCachedMessages(); displayCachedMessages();
}; };
@@ -39,7 +40,7 @@
$: { $: {
if (executeNumber >= 0) { if (executeNumber >= 0) {
displayedMessages = []; displayedMessages = [];
cachedMessagesRef.current = []; cachedMessagesRef.set([]);
} }
} }

View File

@@ -0,0 +1,26 @@
interface Reference<T> {
set(value: T);
get(): T;
reset(): void;
update(func: (arg: T) => T);
}
export default function createRef<T>(value: T): Reference<T> {
return {
value,
initValue: value,
set(value) {
this.value = value;
},
reset() {
this.value = this.initValue;
},
get() {
return this.value;
},
update(func) {
this.value = func(this.value);
},
} as Reference<T>;
}