mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-09-17 04:59:34 +02:00
fix: compute not firing
This commit is contained in:
109
.idea/workspace.xml
generated
109
.idea/workspace.xml
generated
@@ -6,9 +6,8 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="b30e2810-c4c1-4aad-b134-794e52cc1c7d" name="Changes" comment="feat: trim video">
|
<list default="true" id="b30e2810-c4c1-4aad-b134-794e52cc1c7d" name="Changes" comment="feat: trim video">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/components/ToolContent.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/ToolContent.tsx" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/image/png/create-transparent/create-transparent.e2e.spec.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/image/png/create-transparent/create-transparent.e2e.spec.ts" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/components/options/ToolOptions.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/options/ToolOptions.tsx" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/trim/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/trim/index.tsx" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -25,7 +24,7 @@
|
|||||||
<option name="PUSH_AUTO_UPDATE" value="true" />
|
<option name="PUSH_AUTO_UPDATE" value="true" />
|
||||||
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
||||||
<map>
|
<map>
|
||||||
<entry key="$PROJECT_DIR$" value="fork/ady-cf/feature/validate-json" />
|
<entry key="$PROJECT_DIR$" value="fork/EugSh1/truncate-text" />
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
@@ -100,6 +99,7 @@
|
|||||||
}</component>
|
}</component>
|
||||||
<component name="ProjectId" id="2i6g3WkUxdCURKYvUIJ9LMY5Qsc" />
|
<component name="ProjectId" id="2i6g3WkUxdCURKYvUIJ9LMY5Qsc" />
|
||||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||||
|
<OptionsSetting value="false" id="Update" />
|
||||||
<ConfirmationsSetting value="2" id="Add" />
|
<ConfirmationsSetting value="2" id="Add" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectViewState">
|
<component name="ProjectViewState">
|
||||||
@@ -107,54 +107,54 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent"><![CDATA[{
|
<component name="PropertiesComponent">{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"ASKED_ADD_EXTERNAL_FILES": "true",
|
"ASKED_ADD_EXTERNAL_FILES": "true",
|
||||||
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||||
"Docker.Dockerfile build.executor": "Run",
|
"Docker.Dockerfile build.executor": "Run",
|
||||||
"Docker.Dockerfile.executor": "Run",
|
"Docker.Dockerfile.executor": "Run",
|
||||||
"Playwright.Create transparent PNG.should make png color transparent.executor": "Run",
|
"Playwright.Create transparent PNG.should make png color transparent.executor": "Run",
|
||||||
"Playwright.JoinText Component.executor": "Run",
|
"Playwright.JoinText Component.executor": "Run",
|
||||||
"Playwright.JoinText Component.should merge text pieces with specified join character.executor": "Run",
|
"Playwright.JoinText Component.should merge text pieces with specified join character.executor": "Run",
|
||||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"RunOnceActivity.git.unshallow": "true",
|
"RunOnceActivity.git.unshallow": "true",
|
||||||
"Vitest.compute function (1).executor": "Run",
|
"Vitest.compute function (1).executor": "Run",
|
||||||
"Vitest.compute function.executor": "Run",
|
"Vitest.compute function.executor": "Run",
|
||||||
"Vitest.mergeText.executor": "Run",
|
"Vitest.mergeText.executor": "Run",
|
||||||
"Vitest.mergeText.should merge lines and preserve blank lines when deleteBlankLines is false.executor": "Run",
|
"Vitest.mergeText.should merge lines and preserve blank lines when deleteBlankLines is false.executor": "Run",
|
||||||
"Vitest.mergeText.should merge lines, preserve blank lines and trailing spaces when both deleteBlankLines and deleteTrailingSpaces are false.executor": "Run",
|
"Vitest.mergeText.should merge lines, preserve blank lines and trailing spaces when both deleteBlankLines and deleteTrailingSpaces are false.executor": "Run",
|
||||||
"Vitest.removeDuplicateLines function.executor": "Run",
|
"Vitest.removeDuplicateLines function.executor": "Run",
|
||||||
"Vitest.removeDuplicateLines function.newlines option.executor": "Run",
|
"Vitest.removeDuplicateLines function.newlines option.executor": "Run",
|
||||||
"Vitest.removeDuplicateLines function.newlines option.should filter newlines when newlines is set to filter.executor": "Run",
|
"Vitest.removeDuplicateLines function.newlines option.should filter newlines when newlines is set to filter.executor": "Run",
|
||||||
"Vitest.replaceText function (regexp mode).should return the original text when passed an invalid regexp.executor": "Run",
|
"Vitest.replaceText function (regexp mode).should return the original text when passed an invalid regexp.executor": "Run",
|
||||||
"Vitest.replaceText function.executor": "Run",
|
"Vitest.replaceText function.executor": "Run",
|
||||||
"git-widget-placeholder": "main",
|
"git-widget-placeholder": "main",
|
||||||
"ignore.virus.scanning.warn.message": "true",
|
"ignore.virus.scanning.warn.message": "true",
|
||||||
"kotlin-language-version-configured": "true",
|
"kotlin-language-version-configured": "true",
|
||||||
"last_opened_file_path": "C:/Users/Ibrahima/IdeaProjects/omni-tools/src/pages/tools/list/duplicate/index.tsx",
|
"last_opened_file_path": "C:/Users/Ibrahima/IdeaProjects/omni-tools/src/pages/tools/list/duplicate/index.tsx",
|
||||||
"node.js.detected.package.eslint": "true",
|
"node.js.detected.package.eslint": "true",
|
||||||
"node.js.detected.package.tslint": "true",
|
"node.js.detected.package.tslint": "true",
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
"nodejs_package_manager_path": "npm",
|
"nodejs_package_manager_path": "npm",
|
||||||
"npm.build.executor": "Run",
|
"npm.build.executor": "Run",
|
||||||
"npm.dev.executor": "Run",
|
"npm.dev.executor": "Run",
|
||||||
"npm.lint.executor": "Run",
|
"npm.lint.executor": "Run",
|
||||||
"npm.prebuild.executor": "Run",
|
"npm.prebuild.executor": "Run",
|
||||||
"npm.script:create:tool.executor": "Run",
|
"npm.script:create:tool.executor": "Run",
|
||||||
"npm.test.executor": "Run",
|
"npm.test.executor": "Run",
|
||||||
"npm.test:e2e.executor": "Run",
|
"npm.test:e2e.executor": "Run",
|
||||||
"npm.test:e2e:run.executor": "Run",
|
"npm.test:e2e:run.executor": "Run",
|
||||||
"prettierjs.PrettierConfiguration.Package": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\prettier",
|
"prettierjs.PrettierConfiguration.Package": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\prettier",
|
||||||
"project.structure.last.edited": "Problems",
|
"project.structure.last.edited": "Problems",
|
||||||
"project.structure.proportion": "0.0",
|
"project.structure.proportion": "0.0",
|
||||||
"project.structure.side.proportion": "0.2",
|
"project.structure.side.proportion": "0.2",
|
||||||
"settings.editor.selected.configurable": "refactai_advanced_settings",
|
"settings.editor.selected.configurable": "refactai_advanced_settings",
|
||||||
"ts.external.directory.path": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\typescript\\lib",
|
"ts.external.directory.path": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\typescript\\lib",
|
||||||
"vue.rearranger.settings.migration": "true"
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}]]></component>
|
}</component>
|
||||||
<component name="ReactDesignerToolWindowState">
|
<component name="ReactDesignerToolWindowState">
|
||||||
<option name="myId2Visible">
|
<option name="myId2Visible">
|
||||||
<map>
|
<map>
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
<recent name="C:\Users\HP\IdeaProjects\omni-tools\src\components\options" />
|
<recent name="C:\Users\HP\IdeaProjects\omni-tools\src\components\options" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="npm.test:e2e">
|
<component name="RunManager" selected="npm.dev">
|
||||||
<configuration name="Create transparent PNG.should make png color transparent" type="JavaScriptTestRunnerPlaywright" temporary="true" nameIsGenerated="true">
|
<configuration name="Create transparent PNG.should make png color transparent" type="JavaScriptTestRunnerPlaywright" temporary="true" nameIsGenerated="true">
|
||||||
<node-interpreter value="project" />
|
<node-interpreter value="project" />
|
||||||
<playwright-package value="$PROJECT_DIR$/node_modules/@playwright/test" />
|
<playwright-package value="$PROJECT_DIR$/node_modules/@playwright/test" />
|
||||||
@@ -253,10 +253,10 @@
|
|||||||
</list>
|
</list>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
<item itemvalue="npm.test:e2e" />
|
|
||||||
<item itemvalue="Playwright.Create transparent PNG.should make png color transparent" />
|
|
||||||
<item itemvalue="npm.dev" />
|
<item itemvalue="npm.dev" />
|
||||||
<item itemvalue="Vitest.replaceText function (regexp mode).should return the original text when passed an invalid regexp" />
|
<item itemvalue="Vitest.replaceText function (regexp mode).should return the original text when passed an invalid regexp" />
|
||||||
|
<item itemvalue="Playwright.Create transparent PNG.should make png color transparent" />
|
||||||
|
<item itemvalue="npm.test:e2e" />
|
||||||
<item itemvalue="npm.test" />
|
<item itemvalue="npm.test" />
|
||||||
</list>
|
</list>
|
||||||
</recent_temporary>
|
</recent_temporary>
|
||||||
@@ -340,6 +340,7 @@
|
|||||||
<workItem from="1741539602311" duration="4557000" />
|
<workItem from="1741539602311" duration="4557000" />
|
||||||
<workItem from="1741547560596" duration="1671000" />
|
<workItem from="1741547560596" duration="1671000" />
|
||||||
<workItem from="1741567442768" duration="14127000" />
|
<workItem from="1741567442768" duration="14127000" />
|
||||||
|
<workItem from="1741971589699" duration="371000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00115" summary="fix: broken links">
|
<task id="LOCAL-00115" summary="fix: broken links">
|
||||||
<option name="closed" value="true" />
|
<option name="closed" value="true" />
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import React, { useRef, ReactNode, useState } from 'react';
|
import React, { ReactNode, useContext } from 'react';
|
||||||
import { Box } from '@mui/material';
|
import { Box } from '@mui/material';
|
||||||
import { Formik, FormikProps, FormikValues } from 'formik';
|
import { Formik, FormikValues, useFormikContext } from 'formik';
|
||||||
import ToolOptions, { GetGroupsType } from '@components/options/ToolOptions';
|
import ToolOptions, { GetGroupsType } from '@components/options/ToolOptions';
|
||||||
import ToolInputAndResult from '@components/ToolInputAndResult';
|
import ToolInputAndResult from '@components/ToolInputAndResult';
|
||||||
import ToolInfo from '@components/ToolInfo';
|
import ToolInfo from '@components/ToolInfo';
|
||||||
@@ -9,6 +9,29 @@ import ToolExamples, {
|
|||||||
CardExampleType
|
CardExampleType
|
||||||
} from '@components/examples/ToolExamples';
|
} from '@components/examples/ToolExamples';
|
||||||
import { ToolComponentProps } from '@tools/defineTool';
|
import { ToolComponentProps } from '@tools/defineTool';
|
||||||
|
import { CustomSnackBarContext } from '../contexts/CustomSnackBarContext';
|
||||||
|
|
||||||
|
const FormikListenerComponent = <T,>({
|
||||||
|
input,
|
||||||
|
compute
|
||||||
|
}: {
|
||||||
|
input: any;
|
||||||
|
compute: (optionsValues: T, input: any) => void;
|
||||||
|
}) => {
|
||||||
|
const { values } = useFormikContext<T>();
|
||||||
|
const { showSnackBar } = useContext(CustomSnackBarContext);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
try {
|
||||||
|
compute(values, input);
|
||||||
|
} catch (exception: unknown) {
|
||||||
|
if (exception instanceof Error) showSnackBar(exception.message, 'error');
|
||||||
|
else console.error(exception);
|
||||||
|
}
|
||||||
|
}, [values, input, showSnackBar]);
|
||||||
|
|
||||||
|
return null; // This component doesn't render anything
|
||||||
|
};
|
||||||
|
|
||||||
interface ToolContentProps<T, I> extends ToolComponentProps {
|
interface ToolContentProps<T, I> extends ToolComponentProps {
|
||||||
// Input/Output components
|
// Input/Output components
|
||||||
@@ -75,12 +98,8 @@ export default function ToolContent<T extends FormikValues, I>({
|
|||||||
}
|
}
|
||||||
result={resultComponent}
|
result={resultComponent}
|
||||||
/>
|
/>
|
||||||
|
<FormikListenerComponent<T> compute={compute} input={input} />
|
||||||
<ToolOptions
|
<ToolOptions getGroups={getGroups} />
|
||||||
compute={compute}
|
|
||||||
getGroups={getGroups}
|
|
||||||
input={input}
|
|
||||||
/>
|
|
||||||
|
|
||||||
{toolInfo && toolInfo.title && toolInfo.description && (
|
{toolInfo && toolInfo.title && toolInfo.description && (
|
||||||
<ToolInfo
|
<ToolInfo
|
||||||
|
@@ -1,48 +1,21 @@
|
|||||||
import { Box, Stack, useTheme } from '@mui/material';
|
import { Box, Stack, useTheme } from '@mui/material';
|
||||||
import SettingsIcon from '@mui/icons-material/Settings';
|
import SettingsIcon from '@mui/icons-material/Settings';
|
||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import React, { ReactNode, useContext } from 'react';
|
import React, { ReactNode } from 'react';
|
||||||
import { FormikProps, FormikValues, useFormikContext } from 'formik';
|
import { FormikProps, FormikValues, useFormikContext } from 'formik';
|
||||||
import ToolOptionGroups, { ToolOptionGroup } from './ToolOptionGroups';
|
import ToolOptionGroups, { ToolOptionGroup } from './ToolOptionGroups';
|
||||||
import { CustomSnackBarContext } from '../../contexts/CustomSnackBarContext';
|
|
||||||
|
|
||||||
export type UpdateField<T> = <Y extends keyof T>(field: Y, value: T[Y]) => void;
|
export type UpdateField<T> = <Y extends keyof T>(field: Y, value: T[Y]) => void;
|
||||||
|
|
||||||
const FormikListenerComponent = <T,>({
|
|
||||||
input,
|
|
||||||
compute
|
|
||||||
}: {
|
|
||||||
input: any;
|
|
||||||
compute: (optionsValues: T, input: any) => void;
|
|
||||||
}) => {
|
|
||||||
const { values } = useFormikContext<T>();
|
|
||||||
const { showSnackBar } = useContext(CustomSnackBarContext);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
try {
|
|
||||||
compute(values, input);
|
|
||||||
} catch (exception: unknown) {
|
|
||||||
if (exception instanceof Error) showSnackBar(exception.message, 'error');
|
|
||||||
else console.error(exception);
|
|
||||||
}
|
|
||||||
}, [values, input, showSnackBar]);
|
|
||||||
|
|
||||||
return null; // This component doesn't render anything
|
|
||||||
};
|
|
||||||
|
|
||||||
export type GetGroupsType<T> = (
|
export type GetGroupsType<T> = (
|
||||||
formikProps: FormikProps<T> & { updateField: UpdateField<T> }
|
formikProps: FormikProps<T> & { updateField: UpdateField<T> }
|
||||||
) => ToolOptionGroup[];
|
) => ToolOptionGroup[];
|
||||||
|
|
||||||
export default function ToolOptions<T extends FormikValues>({
|
export default function ToolOptions<T extends FormikValues>({
|
||||||
children,
|
children,
|
||||||
compute,
|
|
||||||
input,
|
|
||||||
getGroups
|
getGroups
|
||||||
}: {
|
}: {
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
compute: (optionsValues: T, input: any) => void;
|
|
||||||
input?: any;
|
|
||||||
getGroups: GetGroupsType<T> | null;
|
getGroups: GetGroupsType<T> | null;
|
||||||
}) {
|
}) {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
@@ -74,7 +47,6 @@ export default function ToolOptions<T extends FormikValues>({
|
|||||||
</Stack>
|
</Stack>
|
||||||
<Box mt={2}>
|
<Box mt={2}>
|
||||||
<Stack direction={'row'} spacing={2}>
|
<Stack direction={'row'} spacing={2}>
|
||||||
<FormikListenerComponent<T> compute={compute} input={input} />
|
|
||||||
<ToolOptionGroups
|
<ToolOptionGroups
|
||||||
groups={getGroups({ ...formikContext, updateField }) ?? []}
|
groups={getGroups({ ...formikContext, updateField }) ?? []}
|
||||||
/>
|
/>
|
||||||
|
Reference in New Issue
Block a user