Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -397,3 +397,5 @@ Composer/.vscode/
# Docker App Data
.appdata
docker-compose.override.yml

*.tsbuildinfo
3 changes: 2 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@
"NODE_ENV": "development",
"DEBUG": "composer*"
},
"outputCapture": "std"
"outputCapture": "std",
"preLaunchTask": "electron: build"
},
{
"name": "Debug current jest test",
Expand Down
11 changes: 9 additions & 2 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,15 @@
"command": "yarn build",
"options": {
"cwd": "Composer/packages/server"
},
"problemMatcher": []
}
},
{
"label": "electron: build",
"type": "shell",
"command": "yarn build",
"options": {
"cwd": "Composer/packages/electron-server"
}
}
]
}
2 changes: 2 additions & 0 deletions Composer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@
"start": "cross-env NODE_ENV=production PORT=3000 yarn start:server",
"startall": "yarn start",
"start:dev": "concurrently \"npm:start:client\" \"npm:start:server:dev\"",
"start:dev:electron": "concurrently \"npm:start:client\" \"npm:start:electron\"",
Comment thread
a-b-r-o-w-n marked this conversation as resolved.
"start:client": "yarn workspace @bfc/client start",
"start:electron": "yarn workspace @bfc/electron-server start",
"start:server": "yarn workspace @bfc/server start",
"start:server:dev": "yarn workspace @bfc/server start:dev",
"runtime": "cd ../runtime/dotnet/azurewebapp && dotnet build && dotnet run",
Expand Down
24 changes: 22 additions & 2 deletions Composer/packages/client/__tests__/hooks/useForm.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ describe('useForm', () => {
expect(result.current.formData.requiredField).toEqual('new value');
});

it('can update the whole object', async () => {
it('can update the whole object and validates', async () => {
custValidate.mockReturnValue('custom');
const { result, waitForNextUpdate } = renderHook(() => useForm(fields));

await act(async () => {
Expand All @@ -69,6 +70,10 @@ describe('useForm', () => {
customValidationField: 'form',
asyncValidationField: 'data',
});

expect(result.current.formErrors).toEqual({
customValidationField: 'custom',
});
});
});

Expand All @@ -85,6 +90,21 @@ describe('useForm', () => {
});
});

it('can validate on command', async () => {
custValidate.mockReturnValue('custom');
asyncValidate.mockResolvedValue('async');
const { result, waitForNextUpdate } = renderHook(() => useForm(fields, { validateOnMount: false }));
await act(async () => {
result.current.validateForm();
await waitForNextUpdate();
});

expect(result.current.formErrors).toMatchObject({
customValidationField: 'custom',
asyncValidationField: 'async',
});
});

it('validates required fields', async () => {
const { result, waitForNextUpdate } = renderHook(() => useForm(fields));

Expand All @@ -108,7 +128,7 @@ describe('useForm', () => {
expect(result.current.formErrors.customValidationField).toEqual('my custom validation');
});

it('validates using an asyn validator', async () => {
it('validates using an async validator', async () => {
asyncValidate.mockResolvedValue('my async validation');
const { result, waitForNextUpdate } = renderHook(() => useForm(fields));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ const DefineConversation: React.FC<DefineConversationProps> = (props) => {
: '',
},
};
const { formData, formErrors, hasErrors, updateField, updateForm } = useForm(formConfig);
const { formData, formErrors, hasErrors, updateField, updateForm, validateForm } = useForm(formConfig);

useEffect(() => {
const formData: DefineConversationFormData = {
Expand All @@ -157,31 +157,30 @@ const DefineConversation: React.FC<DefineConversationProps> = (props) => {
? Path.join(focusedStorageFolder.parent, focusedStorageFolder.name)
: '',
};
updateForm(formData);
if (props.location?.search) {
const updatedFormData = {
...formData,
};

const decoded = decodeURIComponent(props.location.search);
const { name, description, schemaUrl } = querystring.parse(decoded);
if (description) {
updatedFormData.description = description as string;
formData.description = description as string;
}

if (schemaUrl) {
updatedFormData.schemaUrl = schemaUrl as string;
formData.schemaUrl = schemaUrl as string;
}

if (name) {
updatedFormData.name = name as string;
formData.name = name as string;
} else {
updatedFormData.name = getDefaultName();
formData.name = getDefaultName();
}
updateForm(updatedFormData);
}
updateForm(formData);
}, [templateId]);

useEffect(() => {
validateForm();
}, [focusedStorageFolder]);

const handleSubmit = useCallback(
(e) => {
e.preventDefault();
Expand Down
12 changes: 10 additions & 2 deletions Composer/packages/client/src/hooks/useForm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,17 @@ export function useForm<D extends object>(fields: FieldConfig<D>, opts: FormOpti

const updateForm = useCallback((newData: D) => {
setFormData(newData);
setFormErrors(mapValues(newData, () => undefined));
Object.entries(newData).forEach(([key, value]) => {
validateField(key as keyof D, fields[key], value);
});
}, []);

const validateForm = useCallback(() => {
Object.entries(formData).forEach(([key, value]) => {
validateField(key as keyof D, fields[key], value);
});
}, [fields, formData]);

useEffect(() => {
if (opts.validateOnMount) {
Object.entries(formData).forEach(([key, value]) => {
Expand All @@ -72,5 +80,5 @@ export function useForm<D extends object>(fields: FieldConfig<D>, opts: FormOpti
}
}, []);

return { formData, formErrors, updateField, updateForm, hasErrors: hasErrors(formErrors) };
return { formData, formErrors, updateField, updateForm, validateForm, hasErrors: hasErrors(formErrors) };
}
6 changes: 2 additions & 4 deletions Composer/packages/electron-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"node": ">=12"
},
"scripts": {
"build": "tsc -p tsconfig.build.json && ncp src/preload.js build/preload.js",
"build": "tsc -b tsconfig.json && ncp src/preload.js build/preload.js",
Comment thread
a-b-r-o-w-n marked this conversation as resolved.
Outdated
"clean": "rimraf build && rimraf dist && rimraf l10ntemp",
"copy-extensions": "node scripts/copy-extensions.js",
"copy-runtime": "node scripts/copy-runtime.js",
Expand All @@ -19,9 +19,7 @@
"lint": "eslint --quiet ./src",
"lint:fix": "yarn lint --fix",
"pack": "node scripts/electronBuilderPack.js",
"start": "cross-env NODE_ENV=development electron .",
"start:electron": "./node_modules/.bin/electron --inspect=7777 --remote-debugging-port=7778 .",
"start:electron:dev": "cross-env NODE_ENV=development ELECTRON_TARGET_URL=http://localhost:3000/ npm run start:electron",
"start": "DEBUG=composer* cross-env NODE_ENV=development electron --inspect=7777 --remote-debugging-port=7778 .",
"test": "jest",
"test:watch": "jest --watch",
"l10n:extract": "cross-env NODE_ENV=production format-message extract -g underscored_crc32 -o locales/en-US.json l10ntemp/**/*.js",
Expand Down
4 changes: 0 additions & 4 deletions Composer/packages/electron-server/tsconfig.build.json

This file was deleted.

5 changes: 4 additions & 1 deletion Composer/packages/electron-server/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@
"target": "es6",
"baseUrl": ".",
"paths": {
"@src/*": ["src/*"]
"@bfc/server": ["../server"]
}
},
"include": ["src/main.ts", "src/preload.js"],
"references": [
{ "path": "../server" }
]
}
7 changes: 5 additions & 2 deletions Composer/packages/server/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build/",
"sourceMap": true,
"target": "es6"
"target": "es6",
"composite": true
},
"include": ["src/**/*.ts"]
"include": ["src"],
"exclude": ["**/__tests__/**", "*.test.ts", "**/__mocks__/**"]
}
13 changes: 0 additions & 13 deletions extensions/azurePublish/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -915,11 +915,6 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=

base64-js@^1.0.2:
version "1.3.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==

bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
Expand Down Expand Up @@ -986,9 +981,6 @@ buffer@^5.1.0, buffer@^5.5.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"

cardinal@^2.1.1:
version "2.1.1"
Expand Down Expand Up @@ -1672,11 +1664,6 @@ hyperlinker@^1.0.0:
resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==

ieee754@^1.1.4:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==

ignore@^5.1.1, ignore@^5.1.4:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
Expand Down
3 changes: 0 additions & 3 deletions extensions/localPublish/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,6 @@ buffer@^5.1.0, buffer@^5.5.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"

chownr@^2.0.0:
version "2.0.0"
Expand Down
3 changes: 0 additions & 3 deletions extensions/vacore/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,6 @@ buffer@^5.1.0, buffer@^5.5.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"

compress-commons@^4.0.0:
version "4.0.1"
Expand Down