TidGi-Desktop/src/windows/AddWorkspace/useCloneWiki.ts
lin onetwo c2be8e4186
Fix/sub wiki tag tree (#667)
* 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
2025-12-07 03:31:34 +08:00

89 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}