diff --git a/.changeset/good-buses-hug.md b/.changeset/good-buses-hug.md index 51806599..c57d4b5f 100644 --- a/.changeset/good-buses-hug.md +++ b/.changeset/good-buses-hug.md @@ -6,6 +6,7 @@ - Factory-модули теперь могут принимать `runParams` - отдельный параметр, который не будет передаваться на сервер, а сразу будет попадать из клиента в клиент. +**Важно:** `runParams` теперь является первым аргументом для `run` функции. - Mountable модули теперь могут использовать запись вида `export default mountableModule;` вместо отдельных экспортов `mount` и `unmount` функций. diff --git a/packages/arui-scripts-modules/src/module-loader/hooks/use-module-factory.ts b/packages/arui-scripts-modules/src/module-loader/hooks/use-module-factory.ts index bbdbb5b4..656b37a7 100644 --- a/packages/arui-scripts-modules/src/module-loader/hooks/use-module-factory.ts +++ b/packages/arui-scripts-modules/src/module-loader/hooks/use-module-factory.ts @@ -23,7 +23,7 @@ export type UseModuleFactoryParams< */ runParams?: RunParams; /** - * Функция, который позволяет дополнить/изменить параметры для фабрики + * Функция, который позволяет дополнить/изменить серверный стейт модуля перед вызовом фабрики */ getFactoryParams?: (params: ServerState) => ServerState; } @@ -65,7 +65,7 @@ export function useModuleFactory< unmountFn = result.unmount; - const factoryParams = (getFactoryParams + const serverState = (getFactoryParams ? await getFactoryParams(result.moduleResources.moduleState as ServerState) : result.moduleResources.moduleState) as ServerState; @@ -79,12 +79,12 @@ export function useModuleFactory< const unwrappedModule = unwrapDefaultExport(result.module); if (typeof unwrappedModule === 'function') { - moduleResult = await unwrappedModule(factoryParams, runParams as RunParams); + moduleResult = await unwrappedModule(runParams as RunParams, serverState); } else if (unwrappedModule.factory && typeof unwrappedModule.factory === 'function') { - moduleResult = await unwrappedModule.factory(factoryParams, runParams as RunParams); + moduleResult = await unwrappedModule.factory(runParams as RunParams, serverState); } else { throw new Error( - `Module ${factoryParams.hostAppId} does not present a factory function, + `Module ${serverState.hostAppId} does not present a factory function, try usign another hook, e.g. 'useModuleLoader' or 'useModuleMounter'` ) } diff --git a/packages/arui-scripts-modules/src/module-loader/module-types.ts b/packages/arui-scripts-modules/src/module-loader/module-types.ts index f34c2cc4..239278f4 100644 --- a/packages/arui-scripts-modules/src/module-loader/module-types.ts +++ b/packages/arui-scripts-modules/src/module-loader/module-types.ts @@ -55,7 +55,7 @@ export type FactoryModuleFunction< RunParams = void, ServerState extends BaseModuleState = BaseModuleState, > = { - (serverState: ServerState, runParams: RunParams): ReturnType; + (runParams: RunParams, serverState: ServerState): ReturnType; }; export type FactoryModule = diff --git a/packages/arui-scripts/docs/modules.md b/packages/arui-scripts/docs/modules.md index 429e1098..4db6d95d 100644 --- a/packages/arui-scripts/docs/modules.md +++ b/packages/arui-scripts/docs/modules.md @@ -98,7 +98,7 @@ export const unmount: ModuleUnmountFunction = (targetNode) => { ```tsx import type { FactoryModule } from '@alfalab/scripts-modules'; -const factory: FactoryModule = function (serverState, runParams) { +const factory: FactoryModule = function (runParams, serverState) { // serverState - это состояние, которое подготовлено на сервере модуля // runParams - это параметры, которые были переданы при запуске модуля клиентом // в фабрике можно на основе стейта вернуть готовый модуль @@ -118,7 +118,7 @@ export default factory; ```ts import type { FactoryModule } from '@alfalab/scripts-modules'; -const factory: FactoryModule = function (serverState, runParams) { +const factory: FactoryModule = function (runParams, serverState) { // в фабрике можно на основе стейта вернуть готовый модуль return { serverState, diff --git a/packages/example-modules/src/modules/factory-module-compat/index.ts b/packages/example-modules/src/modules/factory-module-compat/index.ts index ed55a8a3..ba7db3d6 100644 --- a/packages/example-modules/src/modules/factory-module-compat/index.ts +++ b/packages/example-modules/src/modules/factory-module-compat/index.ts @@ -1,11 +1,10 @@ import type { - BaseModuleState, FactoryModule, WindowWithModule, } from '@alfalab/scripts-modules'; -const factory: FactoryModule = (moduleState, runParams) => ({ +const factory: FactoryModule = (runParams, moduleState) => ({ someData: 'Some data here', saySomething: () => alert('something'), runParams, diff --git a/packages/example-modules/src/modules/server-state-factory-module/index.ts b/packages/example-modules/src/modules/server-state-factory-module/index.ts index a3103c05..d3e42fce 100644 --- a/packages/example-modules/src/modules/server-state-factory-module/index.ts +++ b/packages/example-modules/src/modules/server-state-factory-module/index.ts @@ -1,6 +1,6 @@ import type { FactoryModule } from '@alfalab/scripts-modules'; -const factory: FactoryModule = (moduleState, runParams) => ({ +const factory: FactoryModule = (runParams, moduleState) => ({ someData: 'Some data here', reloadPage: () => location.reload(), runParams,