mirror of
https://github.com/tiddly-gittly/TidGi-Desktop.git
synced 2026-01-22 20:41:39 -08:00
* fix: different out path on macos * fix: let go hibernation promise, so it's faster on macos * log marker [test-id-TIDGI_MINI_WINDOW_CREATED] * Skip registerShortcutByKey in test * fix: mini window on mac * Remove useless log marker * Update handleAttachToTidgiMiniWindow.ts * fix: log marker check all log files * lint * fix: open in new window now showing wiki title * Update package.json * feat: basic load and save to sub wiki using in-tag-tree-of * fix: load sub-wiki content and prevent echo * fix: test and ui logic * test: refactor subwiki test logic to a file * refactor: shorten steps by using dedicated step, and test underlying micro steps * fix: review * refactor: remove outdated method signature * test: unit cover adaptor subwiki routing * Update FileSystemAdaptor.routing.test.ts * fix: merge issue
89 lines
3.9 KiB
TypeScript
89 lines
3.9 KiB
TypeScript
import { WikiCreationMethod } from '@/constants/wikiCreation';
|
||
import { useCallback, useEffect, useState } from 'react';
|
||
import { useTranslation } from 'react-i18next';
|
||
import { callWikiInitialization } from './useCallWikiInitialization';
|
||
import type { IErrorInWhichComponent, IWikiWorkspaceForm } from './useForm';
|
||
import { workspaceConfigFromForm } from './useForm';
|
||
import { updateErrorInWhichComponentSetterByErrorMessage } from './useIndicator';
|
||
|
||
export function useValidateCloneWiki(
|
||
isCreateMainWorkspace: boolean,
|
||
form: IWikiWorkspaceForm,
|
||
errorInWhichComponentSetter: (errors: IErrorInWhichComponent) => void,
|
||
): [boolean, string | undefined, (m: string) => void, (m: boolean) => void] {
|
||
const { t } = useTranslation();
|
||
const [wikiCreationMessage, wikiCreationMessageSetter] = useState<string | undefined>();
|
||
const [hasError, hasErrorSetter] = useState<boolean>(false);
|
||
useEffect(() => {
|
||
if (!form.parentFolderLocation) {
|
||
wikiCreationMessageSetter(`${t('AddWorkspace.NotFilled')}:${t('AddWorkspace.WorkspaceFolder')}`);
|
||
errorInWhichComponentSetter({ parentFolderLocation: true });
|
||
hasErrorSetter(true);
|
||
} else if (!form.wikiFolderName) {
|
||
wikiCreationMessageSetter(`${t('AddWorkspace.NotFilled')}:${t('AddWorkspace.WorkspaceFolderNameToCreate')}`);
|
||
errorInWhichComponentSetter({ wikiFolderName: true });
|
||
hasErrorSetter(true);
|
||
} else if (!form.gitRepoUrl) {
|
||
errorInWhichComponentSetter({ gitRepoUrl: true });
|
||
wikiCreationMessageSetter(`${t('AddWorkspace.NotFilled')}:${t('AddWorkspace.GitRepoUrl')}`);
|
||
hasErrorSetter(true);
|
||
} else if (!isCreateMainWorkspace && !form.mainWikiToLink.wikiFolderLocation) {
|
||
wikiCreationMessageSetter(`${t('AddWorkspace.NotFilled')}:${t('AddWorkspace.MainWorkspace')}`);
|
||
errorInWhichComponentSetter({ mainWikiToLink: true });
|
||
hasErrorSetter(true);
|
||
} else if (form.gitUserInfo === undefined || !(form.gitUserInfo.accessToken.length > 0)) {
|
||
wikiCreationMessageSetter(t('AddWorkspace.NotLoggedIn'));
|
||
errorInWhichComponentSetter({ gitUserInfo: true });
|
||
hasErrorSetter(true);
|
||
} else {
|
||
wikiCreationMessageSetter('');
|
||
errorInWhichComponentSetter({});
|
||
hasErrorSetter(false);
|
||
}
|
||
}, [
|
||
t,
|
||
isCreateMainWorkspace,
|
||
form.parentFolderLocation,
|
||
form.wikiFolderName,
|
||
form.gitRepoUrl,
|
||
form.gitUserInfo,
|
||
form.mainWikiToLink.wikiFolderLocation,
|
||
form.tagNames,
|
||
errorInWhichComponentSetter,
|
||
]);
|
||
return [hasError, wikiCreationMessage, wikiCreationMessageSetter, hasErrorSetter];
|
||
}
|
||
|
||
export function useCloneWiki(
|
||
isCreateMainWorkspace: boolean,
|
||
form: IWikiWorkspaceForm,
|
||
wikiCreationMessageSetter: (m: string) => void,
|
||
hasErrorSetter: (m: boolean) => void,
|
||
errorInWhichComponentSetter: (errors: IErrorInWhichComponent) => void,
|
||
): () => Promise<void> {
|
||
const { t } = useTranslation();
|
||
|
||
const onSubmit = useCallback(async () => {
|
||
wikiCreationMessageSetter(t('AddWorkspace.Processing'));
|
||
try {
|
||
const newWorkspaceConfig = workspaceConfigFromForm(form, isCreateMainWorkspace, true);
|
||
if (isCreateMainWorkspace) {
|
||
await window.service.wiki.cloneWiki(form.parentFolderLocation, form.wikiFolderName, form.gitRepoUrl, form.gitUserInfo!);
|
||
} else {
|
||
await window.service.wiki.cloneSubWiki(
|
||
form.parentFolderLocation,
|
||
form.wikiFolderName,
|
||
form.gitRepoUrl,
|
||
form.gitUserInfo!,
|
||
);
|
||
}
|
||
await callWikiInitialization(newWorkspaceConfig, wikiCreationMessageSetter, t, form.gitUserInfo, { from: WikiCreationMethod.Clone });
|
||
} catch (error) {
|
||
wikiCreationMessageSetter((error as Error).message);
|
||
updateErrorInWhichComponentSetterByErrorMessage(t, (error as Error).message, errorInWhichComponentSetter);
|
||
hasErrorSetter(true);
|
||
}
|
||
}, [wikiCreationMessageSetter, t, form, isCreateMainWorkspace, errorInWhichComponentSetter, hasErrorSetter]);
|
||
|
||
return onSubmit;
|
||
}
|