@cdmbase/wiki-browser 12.0.18-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/components/Logo.d.ts +4 -0
- package/lib/components/Logo.d.ts.map +1 -0
- package/lib/components/Logo.js +16 -0
- package/lib/components/Logo.js.map +1 -0
- package/lib/components/help/SidebarSearch.d.ts +8 -0
- package/lib/components/help/SidebarSearch.d.ts.map +1 -0
- package/lib/components/help/SidebarSearch.js +111 -0
- package/lib/components/help/SidebarSearch.js.map +1 -0
- package/lib/components/help/index.d.ts +2 -0
- package/lib/components/help/index.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.d.ts +13 -0
- package/lib/components/landing/FeatureCard.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.js +85 -0
- package/lib/components/landing/FeatureCard.js.map +1 -0
- package/lib/components/landing/QuickLinkCard.d.ts +8 -0
- package/lib/components/landing/QuickLinkCard.d.ts.map +1 -0
- package/lib/components/landing/QuickLinkCard.js +26 -0
- package/lib/components/landing/QuickLinkCard.js.map +1 -0
- package/lib/components/landing/SearchInput.d.ts +10 -0
- package/lib/components/landing/SearchInput.d.ts.map +1 -0
- package/lib/components/landing/SearchInput.js +223 -0
- package/lib/components/landing/SearchInput.js.map +1 -0
- package/lib/components/landing/index.d.ts +4 -0
- package/lib/components/landing/index.d.ts.map +1 -0
- package/lib/components/welcome.d.ts +3 -0
- package/lib/components/welcome.d.ts.map +1 -0
- package/lib/compute.d.ts +4 -0
- package/lib/compute.d.ts.map +1 -0
- package/lib/compute.js +96 -0
- package/lib/compute.js.map +1 -0
- package/lib/config/env-config.d.ts +4 -0
- package/lib/config/env-config.d.ts.map +1 -0
- package/lib/config/env-config.js +7 -0
- package/lib/config/env-config.js.map +1 -0
- package/lib/docs.config.d.ts +48 -0
- package/lib/docs.config.d.ts.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/loaders/search.d.ts +1 -0
- package/lib/loaders/search.d.ts.map +1 -0
- package/lib/module.d.ts +4 -0
- package/lib/module.d.ts.map +1 -0
- package/lib/module.js +11 -0
- package/lib/module.js.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts +4 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.js +222 -0
- package/lib/pages/ArticlePage/ArticlePage.js.map +1 -0
- package/lib/pages/ArticlePage/index.d.ts +3 -0
- package/lib/pages/ArticlePage/index.d.ts.map +1 -0
- package/lib/pages/ArticlePage/index.js +3 -0
- package/lib/pages/ArticlePage/index.js.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts +4 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js +103 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js.map +1 -0
- package/lib/pages/CategoryCollection/index.d.ts +3 -0
- package/lib/pages/CategoryCollection/index.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/index.js +3 -0
- package/lib/pages/CategoryCollection/index.js.map +1 -0
- package/lib/pages/Help/HelpIndex.d.ts +4 -0
- package/lib/pages/Help/HelpIndex.d.ts.map +1 -0
- package/lib/pages/Help/HelpIndex.js +44 -0
- package/lib/pages/Help/HelpIndex.js.map +1 -0
- package/lib/pages/Help/index.d.ts +4 -0
- package/lib/pages/Help/index.d.ts.map +1 -0
- package/lib/pages/Help/index.js +226 -0
- package/lib/pages/Help/index.js.map +1 -0
- package/lib/pages/Landing/index.d.ts +3 -0
- package/lib/pages/Landing/index.d.ts.map +1 -0
- package/lib/pages/Landing/index.js +281 -0
- package/lib/pages/Landing/index.js.map +1 -0
- package/lib/routes.json +2533 -0
- package/lib/seo.d.ts +22 -0
- package/lib/seo.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.d.ts +3 -0
- package/lib/slot-fill/FooterFill.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.js +18 -0
- package/lib/slot-fill/FooterFill.js.map +1 -0
- package/lib/slot-fill/LogoFill.d.ts +5 -0
- package/lib/slot-fill/LogoFill.d.ts.map +1 -0
- package/lib/slot-fill/LogoFill.js +74 -0
- package/lib/slot-fill/LogoFill.js.map +1 -0
- package/lib/slot-fill/consts.d.ts +5 -0
- package/lib/slot-fill/consts.d.ts.map +1 -0
- package/lib/slot-fill/consts.js +1 -0
- package/lib/slot-fill/consts.js.map +1 -0
- package/lib/slot-fill/index.d.ts +4 -0
- package/lib/slot-fill/index.d.ts.map +1 -0
- package/lib/templates/assets/images/add-link-frontend.png +0 -0
- package/lib/templates/assets/images/add-package-backend.png +0 -0
- package/lib/templates/assets/images/add-to-backend-module.png +0 -0
- package/lib/templates/assets/images/add-upload-client-frontend.png +0 -0
- package/lib/templates/assets/images/additional-parameters.png +0 -0
- package/lib/templates/assets/images/aeh-implementation.png +0 -0
- package/lib/templates/assets/images/aeh-usage.png +0 -0
- package/lib/templates/assets/images/apollo-client/recommendation_cache_mgmt.png +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins1.PNG +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins2.PNG +0 -0
- package/lib/templates/assets/images/auth-wrapper-code.png +0 -0
- package/lib/templates/assets/images/cdebase.png +0 -0
- package/lib/templates/assets/images/cdm-locales-directory.png +0 -0
- package/lib/templates/assets/images/client-settings.png +0 -0
- package/lib/templates/assets/images/codegen_file_update.png +0 -0
- package/lib/templates/assets/images/configuration.png +0 -0
- package/lib/templates/assets/images/copy-plugin.png +0 -0
- package/lib/templates/assets/images/docusaurus.png +0 -0
- package/lib/templates/assets/images/error-link.png +0 -0
- package/lib/templates/assets/images/error-sample.png +0 -0
- package/lib/templates/assets/images/extension copy.png +0 -0
- package/lib/templates/assets/images/extension.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-backend.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-with-gql.png +0 -0
- package/lib/templates/assets/images/i18n-config.png +0 -0
- package/lib/templates/assets/images/image.png +0 -0
- package/lib/templates/assets/images/logo.svg +10 -0
- package/lib/templates/assets/images/logo1.svg +1 -0
- package/lib/templates/assets/images/modify-upload-false-server.png +0 -0
- package/lib/templates/assets/images/navigation-auth-enabled.png +0 -0
- package/lib/templates/assets/images/org-dashboard-navigation.png +0 -0
- package/lib/templates/assets/images/org-navigation.png +0 -0
- package/lib/templates/assets/images/preferences_graphql_type.png +0 -0
- package/lib/templates/assets/images/provider.png +0 -0
- package/lib/templates/assets/images/route-config.png +0 -0
- package/lib/templates/assets/images/service-accounts.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-environments.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-organization.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/jenkins-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/lerna-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/root-package-json-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/values-dev-changes.png +0 -0
- package/lib/templates/assets/images/sso-mappers.png +0 -0
- package/lib/templates/assets/images/sso-picture-mapper.png +0 -0
- package/lib/templates/assets/images/sso-settings.png +0 -0
- package/lib/templates/assets/images/timesheet_apollo_cache.png +0 -0
- package/lib/templates/assets/images/timesheet_query.png +0 -0
- package/lib/templates/assets/images/tutorial/docsVersionDropdown.png +0 -0
- package/lib/templates/assets/images/tutorial/localeDropdown.png +0 -0
- package/lib/templates/assets/images/unauthenticated.png +0 -0
- package/lib/templates/assets/images/undraw_docusaurus_mountain.svg +170 -0
- package/lib/templates/assets/images/undraw_docusaurus_react.svg +169 -0
- package/lib/templates/assets/images/undraw_docusaurus_tree.svg +1 -0
- package/lib/templates/assets/images/vite-plugin-config.png +0 -0
- package/lib/templates/content/docs/Generators/Project/generate-fullproject.md +12 -0
- package/lib/templates/content/docs/LLM/Logger.llm.md +194 -0
- package/lib/templates/content/docs/LLM/backend-proxies-services-llm.md +2687 -0
- package/lib/templates/content/docs/LLM/backend-service-llm.md +3384 -0
- package/lib/templates/content/docs/LLM/db_migration_llm.md +954 -0
- package/lib/templates/content/docs/LLM/frontend/REMIX-15.3-upgrade-llm.md +1245 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_FUNCTION_DEVELOPMENT_GUIDE_LLM.md +1241 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_NAMESPACE_LLM.md +384 -0
- package/lib/templates/content/docs/LLM/llm_workflow_namespace.md +384 -0
- package/lib/templates/content/docs/LLM/organization-components-form-llm.md +1395 -0
- package/lib/templates/content/docs/LLM/page-component-llm.md +173 -0
- package/lib/templates/content/docs/LLM/preferences-settings-llm.md +2781 -0
- package/lib/templates/content/docs/LLM/tailwind-css-llm.md +502 -0
- package/lib/templates/content/docs/UI/SchemaBasedUI.md +334 -0
- package/lib/templates/content/docs/UI/SlotFillComponent.md +334 -0
- package/lib/templates/content/docs/adminide-modules/account/auth0-login.md +31 -0
- package/lib/templates/content/docs/adminide-modules/account/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/account/keycloak-remix-setup.md +86 -0
- package/lib/templates/content/docs/adminide-modules/account/remix-auth-setup.md +79 -0
- package/lib/templates/content/docs/adminide-modules/account/various-auth-qatest.md +157 -0
- package/lib/templates/content/docs/adminide-modules/api-builders/graphql.md +906 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/settingup-stripe-locally.md +25 -0
- package/lib/templates/content/docs/adminide-modules/billing/tier-config.md +293 -0
- package/lib/templates/content/docs/adminide-modules/connectors/Connector.md +207 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/index.md +16 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/setup.md +435 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/upload-file-using-signed-url.md +161 -0
- package/lib/templates/content/docs/adminide-modules/preferences/AddAdditionalPermissions.md +151 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Configuration.md +241 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Policy-Configuration.md +61 -0
- package/lib/templates/content/docs/adminide-modules/preferences/UI-components/ResourceSettingsLoader.md +319 -0
- package/lib/templates/content/docs/adminide-modules/preferences/contribute_scope_target.md +280 -0
- package/lib/templates/content/docs/adminide-modules/preferences/generate-urii.md +94 -0
- package/lib/templates/content/docs/adminide-modules/preferences/index.md +28 -0
- package/lib/templates/content/docs/adminide-modules/preferences/machine-configuration.md +157 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/generateCdecodeUri.md +1289 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/migratingFromUseSettings.md +215 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/Roles-Permissions.md +72 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/settingUserPermissions.md +139 -0
- package/lib/templates/content/docs/adminide-modules/preferences/preference-dependency.md +138 -0
- package/lib/templates/content/docs/adminide-modules/preferences/route-based-configuration.md +41 -0
- package/lib/templates/content/docs/adminide-modules/preferences/schema-configuration.md +71 -0
- package/lib/templates/content/docs/adminide-modules/preferences/supported.md +24 -0
- package/lib/templates/content/docs/adminide-modules/preferences/useSettingsLoader.md +248 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/auth-providers.md +1317 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/keycloak-guide.md +543 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-based-authentication.md +846 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-management.md +708 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenants.md +1117 -0
- package/lib/templates/content/docs/chrome-extension/index.md +14 -0
- package/lib/templates/content/docs/chrome-extension/setup.md +30 -0
- package/lib/templates/content/docs/contributing/adding-package.md +23 -0
- package/lib/templates/content/docs/contributing/adding_new_modules.md +99 -0
- package/lib/templates/content/docs/contributing/architecture-updates.md +19 -0
- package/lib/templates/content/docs/contributing/avoid-using-promises-ui.md +116 -0
- package/lib/templates/content/docs/contributing/coding-guidelines.md +111 -0
- package/lib/templates/content/docs/contributing/do-and-dont.md +42 -0
- package/lib/templates/content/docs/contributing/faq.md +22 -0
- package/lib/templates/content/docs/contributing/folder-setup/browser.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/config.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/containers-server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/core.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/graphql.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/index.md +30 -0
- package/lib/templates/content/docs/contributing/folder-setup/module.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/services.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/store.md +12 -0
- package/lib/templates/content/docs/contributing/frontend-coding.md +30 -0
- package/lib/templates/content/docs/contributing/git-subtree-sharing.md +73 -0
- package/lib/templates/content/docs/contributing/graphql-subscriptions.md +69 -0
- package/lib/templates/content/docs/contributing/how-to-contribute.md +30 -0
- package/lib/templates/content/docs/contributing/how_to_check_pure_esm.md +29 -0
- package/lib/templates/content/docs/contributing/index.md +60 -0
- package/lib/templates/content/docs/contributing/installation-issues.md +23 -0
- package/lib/templates/content/docs/contributing/keyboard-shortcut.md +131 -0
- package/lib/templates/content/docs/contributing/language/locale-support.md +12 -0
- package/lib/templates/content/docs/contributing/lerna-build-tools.md +516 -0
- package/lib/templates/content/docs/contributing/lerna-yarn-workspaces.md +95 -0
- package/lib/templates/content/docs/contributing/lint-and-formatter.md +20 -0
- package/lib/templates/content/docs/contributing/mobile-setup.md +16 -0
- package/lib/templates/content/docs/contributing/project-setup.md +233 -0
- package/lib/templates/content/docs/contributing/react/index.md +14 -0
- package/lib/templates/content/docs/contributing/react/lazy-component.md +70 -0
- package/lib/templates/content/docs/contributing/run-various-options.md +124 -0
- package/lib/templates/content/docs/contributing/schema-first-graphql-types.md +37 -0
- package/lib/templates/content/docs/contributing/source-code-organization.md +57 -0
- package/lib/templates/content/docs/contributing/staging-docker.md +88 -0
- package/lib/templates/content/docs/contributing/third-party/apollo-client-v3-tutorials.md +28 -0
- package/lib/templates/content/docs/contributing/third-party/index.md +18 -0
- package/lib/templates/content/docs/contributing/typescript-contribution.md +16 -0
- package/lib/templates/content/docs/devops/app-deploy-new-version.md +30 -0
- package/lib/templates/content/docs/devops/index.md +14 -0
- package/lib/templates/content/docs/devops/mobile-jenkins-build.md +40 -0
- package/lib/templates/content/docs/devops/versioning-the-project.md +128 -0
- package/lib/templates/content/docs/error-handler/application-error-handler.md +40 -0
- package/lib/templates/content/docs/error-handler/error-handling.md +26 -0
- package/lib/templates/content/docs/error-handler/index.md +16 -0
- package/lib/templates/content/docs/error-handler/logging-errors.md +14 -0
- package/lib/templates/content/docs/feature-api/copy-operation.md +427 -0
- package/lib/templates/content/docs/feature-api/feature-browser/assets.md +46 -0
- package/lib/templates/content/docs/feature-api/feature-browser/auth-permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-browser/feature.md +131 -0
- package/lib/templates/content/docs/feature-api/feature-browser/index.md +22 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routes-menu.md +110 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing-convention.md +124 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing.md +338 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/auth-permissions.md +20 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/feature.md +130 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/index.md +18 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/navigation.md +187 -0
- package/lib/templates/content/docs/feature-api/feature-server/Scheduling.md +44 -0
- package/lib/templates/content/docs/feature-api/feature-server/dataloader.md +320 -0
- package/lib/templates/content/docs/feature-api/feature-server/dependency-injection.md +81 -0
- package/lib/templates/content/docs/feature-api/feature-server/feature.md +65 -0
- package/lib/templates/content/docs/feature-api/feature-server/generic-dataloader.md +135 -0
- package/lib/templates/content/docs/feature-api/feature-server/index.md +40 -0
- package/lib/templates/content/docs/feature-api/feature-server/migration.md +127 -0
- package/lib/templates/content/docs/feature-api/feature-server/mongo-model.md +72 -0
- package/lib/templates/content/docs/feature-api/feature-server/permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/policies.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/preferences.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/repositories.md +114 -0
- package/lib/templates/content/docs/feature-api/feature-server/resolvers.md +126 -0
- package/lib/templates/content/docs/feature-api/feature-server/rules.md +132 -0
- package/lib/templates/content/docs/feature-api/feature-server/schema.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/services.md +102 -0
- package/lib/templates/content/docs/feature-api/feature-server/setup-resource-crud.md +359 -0
- package/lib/templates/content/docs/feature-api/index.md +18 -0
- package/lib/templates/content/docs/graphql/apolloClient-mutation.md +94 -0
- package/lib/templates/content/docs/graphql/index.md +14 -0
- package/lib/templates/content/docs/graphql/scalars.md +15 -0
- package/lib/templates/content/docs/help/index.md +14 -0
- package/lib/templates/content/docs/help/intro.md +16 -0
- package/lib/templates/content/docs/intl/ant-design-menu-translation.md +74 -0
- package/lib/templates/content/docs/intl/intl-namespace.md +129 -0
- package/lib/templates/content/docs/intl/vite-plugin-intl.md +87 -0
- package/lib/templates/content/docs/intl/webpack-plugin-intl.md +12 -0
- package/lib/templates/content/docs/intro.md +18 -0
- package/lib/templates/content/docs/knowledge/basic-fullstack.md +238 -0
- package/lib/templates/content/docs/mailing/index.md +14 -0
- package/lib/templates/content/docs/mailing/mailing-template.md +148 -0
- package/lib/templates/content/docs/mobile/App-navigation-generator.md +410 -0
- package/lib/templates/content/docs/mobile/MobileTestCases.md +264 -0
- package/lib/templates/content/docs/mobile/eas-profile-build.md +107 -0
- package/lib/templates/content/docs/mobile/expo-push-notification-setup.md +216 -0
- package/lib/templates/content/docs/mobile/index.md +14 -0
- package/lib/templates/content/docs/mobile/routes.md +83 -0
- package/lib/templates/content/docs/organization/adding-account-context.md +116 -0
- package/lib/templates/content/docs/organization/adding-org-mobile-navigation.md +22 -0
- package/lib/templates/content/docs/organization/adding-org-web-navigation.md +12 -0
- package/lib/templates/content/docs/organization/index.md +20 -0
- package/lib/templates/content/docs/organization/initialization.md +20 -0
- package/lib/templates/content/docs/organization/organization-resource-vs-resource.md +112 -0
- package/lib/templates/content/docs/remix/configuration/component-structure-best-practices.md +152 -0
- package/lib/templates/content/docs/remix/configuration/configurations.md +218 -0
- package/lib/templates/content/docs/remix/configuration/css-import-and-stylesheets.md +142 -0
- package/lib/templates/content/docs/remix/configuration/dont-subcomponent-network.md +166 -0
- package/lib/templates/content/docs/remix/configuration/generated-data-loaders.md +122 -0
- package/lib/templates/content/docs/remix/configuration/generated-resource-loaders.md +257 -0
- package/lib/templates/content/docs/remix/configuration/query-params-generator.md +216 -0
- package/lib/templates/content/docs/remix/configuration/routes-extra-icons.md +103 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-advanced.md +86 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-auth.md +113 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-best-practices.md +55 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-fields.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-graphql.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-index.md +112 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-loaders.md +165 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-middleware.md +196 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-overview.md +53 -0
- package/lib/templates/content/docs/remix/data-loaders.md +43 -0
- package/lib/templates/content/docs/remix/devtools/remix-devtools.md +58 -0
- package/lib/templates/content/docs/remix/examples/changes-using-servercode.md +79 -0
- package/lib/templates/content/docs/remix/extra-icons.md +62 -0
- package/lib/templates/content/docs/remix/extra-links.md +65 -0
- package/lib/templates/content/docs/remix/generated-data-loaders.md +114 -0
- package/lib/templates/content/docs/remix/queryParamsGenerator.md +89 -0
- package/lib/templates/content/docs/remix/resources.md +16 -0
- package/lib/templates/content/docs/remix/styles.md +132 -0
- package/lib/templates/content/docs/remix/wiki.md +12 -0
- package/lib/templates/content/docs/security/auth-wrapper/auth-wrapper.md +24 -0
- package/lib/templates/content/docs/security/index.md +18 -0
- package/lib/templates/content/docs/security/secure-button-mobilenative.md +88 -0
- package/lib/templates/content/docs/security/secure-button-web.md +89 -0
- package/lib/templates/content/docs/server-side/account-customization.md +82 -0
- package/lib/templates/content/docs/server-side/apollo/caching.md +164 -0
- package/lib/templates/content/docs/server-side/backend-architecture/FINAL-DECISION.md +209 -0
- package/lib/templates/content/docs/server-side/backend-architecture/TRUE-FINAL-ARCHITECTURE.md +603 -0
- package/lib/templates/content/docs/server-side/backend-architecture/index1.md +0 -0
- package/lib/templates/content/docs/server-side/backend-coding.md +839 -0
- package/lib/templates/content/docs/server-side/e2b/manageing-template.md +197 -0
- package/lib/templates/content/docs/server-side/index.md +14 -0
- package/lib/templates/content/docs/server-side/inngest-functions-module.md +309 -0
- package/lib/templates/content/docs/server-side/listen-stripe-events.md +43 -0
- package/lib/templates/content/docs/server-side/slug-service.md +323 -0
- package/lib/templates/content/docs/tests/index.md +18 -0
- package/lib/templates/content/docs/tests/jest-test-debug-vscode.md +40 -0
- package/lib/templates/content/docs/tests/known-errors.md +116 -0
- package/lib/templates/content/docs/tests/service-test-template.md +118 -0
- package/lib/templates/content/docs/tests/test-setup.md +93 -0
- package/lib/templates/content/docs/xstate.md +23 -0
- package/lib/types.d.ts +37 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/utils/docsNavigation.d.ts +9 -0
- package/lib/utils/docsNavigation.d.ts.map +1 -0
- package/lib/utils/docsNavigation.js +37 -0
- package/lib/utils/docsNavigation.js.map +1 -0
- package/lib/utils/helpCenterUtils.d.ts +26 -0
- package/lib/utils/helpCenterUtils.d.ts.map +1 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/markdownLoader.d.ts +36 -0
- package/lib/utils/markdownLoader.d.ts.map +1 -0
- package/lib/utils/markdownLoader.js +2242 -0
- package/lib/utils/markdownLoader.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Schema Based UI Forms
|
|
4
|
+
description: Schema Based UI Forms
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Schema Based UI Forms...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Schema Based UI Forms
|
|
13
|
+
|
|
14
|
+
`react-jsonschema-form` is meant to automatically generate a React form based on a JSON Schema. If you want to generate a form for any data, sight unseen, simply given a JSON schema, `react-jsonschema-form` may be for you. If you have a priori knowledge of your data and want a toolkit for generating forms for it, you might look elsewhere.
|
|
15
|
+
|
|
16
|
+
`react-jsonschema-form` also comes with tools such as `uiSchema` and other form props to customize the look and feel of the form beyond the default themes.
|
|
17
|
+
|
|
18
|
+
# Usage
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
import { RJSFSchema } from '@rjsf/utils';
|
|
22
|
+
import validator from '@rjsf/validator-ajv8';
|
|
23
|
+
|
|
24
|
+
const schema: RJSFSchema = {
|
|
25
|
+
title: 'Todo',
|
|
26
|
+
type: 'object',
|
|
27
|
+
required: ['title'],
|
|
28
|
+
properties: {
|
|
29
|
+
title: { type: 'string', title: 'Title', default: 'A new task' },
|
|
30
|
+
done: { type: 'boolean', title: 'Done?', default: false },
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const log = (type) => console.log.bind(console, type);
|
|
35
|
+
|
|
36
|
+
render(
|
|
37
|
+
<Form
|
|
38
|
+
schema={schema}
|
|
39
|
+
validator={validator}
|
|
40
|
+
onChange={log('changed')}
|
|
41
|
+
onSubmit={log('submitted')}
|
|
42
|
+
onError={log('errors')}
|
|
43
|
+
/>,
|
|
44
|
+
document.getElementById('app'),
|
|
45
|
+
);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
# JSON Schema
|
|
49
|
+
|
|
50
|
+
JSON Schema is a format for describing the structure and constraints of JSON data, widely used in React JSONSchema Form (rjfs) to define data models and validation rules for forms.
|
|
51
|
+
|
|
52
|
+
## Basics
|
|
53
|
+
|
|
54
|
+
- **`type` Property:** Specifies the expected data type, such as `"string"`, `"number"`, `"integer"`, `"boolean"`, `"object"`, or `"array"`.
|
|
55
|
+
|
|
56
|
+
- **`properties` Property:** Defines fields within an object. Each field is described as a key-value pair, where the key is the field name, and the value is another JSON Schema describing the field.
|
|
57
|
+
|
|
58
|
+
- **`required` Property:** An array listing fields that must be present in the object.
|
|
59
|
+
|
|
60
|
+
## Common Constraints
|
|
61
|
+
|
|
62
|
+
- **Additional Properties:** Various properties like `"minimum"`, `"maximum"`, `"enum"`, etc., can be used to set constraints based on the data type.
|
|
63
|
+
|
|
64
|
+
## Example Usage
|
|
65
|
+
|
|
66
|
+
```jsx
|
|
67
|
+
import { render } from 'react-dom';
|
|
68
|
+
import { Form } from '@rjsf/core';
|
|
69
|
+
|
|
70
|
+
const jsonSchema = {
|
|
71
|
+
type: 'object',
|
|
72
|
+
properties: {
|
|
73
|
+
firstName: { type: 'string' },
|
|
74
|
+
lastName: { type: 'string' },
|
|
75
|
+
age: { type: 'integer', minimum: 0 },
|
|
76
|
+
},
|
|
77
|
+
required: ['firstName', 'lastName'],
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
render(<Form schema={jsonSchema} />, document.getElementById('app'));
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
# UI Schema in JSON Form
|
|
84
|
+
|
|
85
|
+
The UI Schema in React JSON Form (rjfs) serves as a configuration object, dictating the visual representation and behavior of form elements. It allows for customization of the appearance and functionality of different fields within a form.
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
const uiSchema = {
|
|
89
|
+
// ... fields definition
|
|
90
|
+
};
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
# Structure of the UI Schema
|
|
94
|
+
|
|
95
|
+
The UI Schema provided organizes the layout and styling for distinct groups of fields related to pricing information within a form.
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
price: {
|
|
99
|
+
// ... price-related fields
|
|
100
|
+
},
|
|
101
|
+
additionalPrice: {
|
|
102
|
+
// ... additional price-related fields
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
# Fields in UI Schema
|
|
107
|
+
|
|
108
|
+
Each field in the UI Schema corresponds to a specific data field in the form. Properties associated with these fields control their appearance and behavior.
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
priceType: { 'ui:colSpan': 5 },
|
|
112
|
+
pricePerGuestEnabled: { 'ui:widget': 'SwitchWidget' },
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
# Widgets in UI Schema
|
|
116
|
+
|
|
117
|
+
Widgets specify the type of UI element used to display a particular field, influencing how the input is rendered.
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
'ui:widget': 'SwitchWidget',
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
# Templates in UI Schema
|
|
124
|
+
|
|
125
|
+
Templates enable the customization of the layout and structure for groups of related fields, aiding in organization and styling.
|
|
126
|
+
|
|
127
|
+
No specific example is provided in the given UI Schema.
|
|
128
|
+
|
|
129
|
+
# `ui:colSpan` for Input Field Size
|
|
130
|
+
|
|
131
|
+
The `ui:colSpan` property is utilized to define the size of the input field, indicating the number of columns it should span within the form layout.
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
'ui:colSpan': 7,
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
# `ui:field` for Custom Input Components
|
|
138
|
+
|
|
139
|
+
The `ui:field` property designates a custom input component (widget) for a particular field, allowing for the integration of specialized UI elements.
|
|
140
|
+
|
|
141
|
+
```javascript
|
|
142
|
+
'ui:colSpan': 6, 'ui:field': 'InputWithDropdown',
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
# Widget and Field Customization
|
|
146
|
+
|
|
147
|
+
- **Widget**: Represents an HTML tag for the user to input data (e.g., input, select, etc.).
|
|
148
|
+
|
|
149
|
+
- **Field**: Typically wraps one or more widgets and often manages internal field state, akin to a form row, including labels.
|
|
150
|
+
|
|
151
|
+
## Customizing Default Fields and Widgets
|
|
152
|
+
|
|
153
|
+
You have the flexibility to override any default field and widget, including internal widgets like CheckboxWidget used by ObjectField for boolean values. This can be achieved by providing customized fields and widgets in the `fields` and `widgets` props.
|
|
154
|
+
|
|
155
|
+
```jsx
|
|
156
|
+
import { RJSFSchema, UiSchema, WidgetProps, RegistryWidgetsType } from '@rjsf/utils';
|
|
157
|
+
import validator from '@rjsf/validator-ajv8';
|
|
158
|
+
|
|
159
|
+
const schema: RJSFSchema = {
|
|
160
|
+
type: 'boolean',
|
|
161
|
+
default: true,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const uiSchema: UiSchema = {
|
|
165
|
+
'ui:widget': 'checkbox',
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const CustomCheckbox = function (props: WidgetProps) {
|
|
169
|
+
return (
|
|
170
|
+
<button
|
|
171
|
+
id="custom"
|
|
172
|
+
className={props.value ? 'checked' : 'unchecked'}
|
|
173
|
+
onClick={() => props.onChange(!props.value)}
|
|
174
|
+
>
|
|
175
|
+
{String(props.value)}
|
|
176
|
+
</button>
|
|
177
|
+
);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const widgets: RegistryWidgetsType = {
|
|
181
|
+
CheckboxWidget: CustomCheckbox,
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
render(
|
|
185
|
+
<Form schema={schema} uiSchema={uiSchema} validator={validator} widgets={widgets} />,
|
|
186
|
+
document.getElementById('app'),
|
|
187
|
+
);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Custom Component Registration
|
|
191
|
+
|
|
192
|
+
Another approach to registering custom components in React JSON Form (rjfs) involves registering them collectively by passing the `widgets` prop to the Form component. The registered components can then be referenced from the `uiSchema`.
|
|
193
|
+
|
|
194
|
+
```jsx
|
|
195
|
+
import { RJSFSchema, UiSchema, WidgetProps, RegistryWidgetsType } from '@rjsf/utils';
|
|
196
|
+
import validator from '@rjsf/validator-ajv8';
|
|
197
|
+
|
|
198
|
+
// Define a custom widget, MyCustomWidget
|
|
199
|
+
const MyCustomWidget = (props: WidgetProps) => {
|
|
200
|
+
return (
|
|
201
|
+
<input
|
|
202
|
+
type="text"
|
|
203
|
+
className="custom"
|
|
204
|
+
value={props.value}
|
|
205
|
+
required={props.required}
|
|
206
|
+
onChange={(event) => props.onChange(event.target.value)}
|
|
207
|
+
/>
|
|
208
|
+
);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// Register the custom widget
|
|
212
|
+
const widgets: RegistryWidgetsType = {
|
|
213
|
+
myCustomWidget: MyCustomWidget,
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// Define a schema for a string field
|
|
217
|
+
const schema: RJSFSchema = {
|
|
218
|
+
type: 'string',
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Reference the custom widget in the uiSchema
|
|
222
|
+
const uiSchema: UiSchema = {
|
|
223
|
+
'ui:widget': 'myCustomWidget',
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
// Render the form with the registered custom widget
|
|
227
|
+
render(
|
|
228
|
+
<Form schema={schema} uiSchema={uiSchema} validator={validator} widgets={widgets} />,
|
|
229
|
+
document.getElementById('app'),
|
|
230
|
+
);
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
# Template Customization
|
|
234
|
+
|
|
235
|
+
## BaseInputTemplate
|
|
236
|
+
|
|
237
|
+
The `BaseInputTemplate` serves as the template for rendering the basic `<input>` component within a theme in React JSON Form (rjfs). It acts as the foundation for rendering various `<input>`-based widgets that may differ by type and callbacks only.
|
|
238
|
+
|
|
239
|
+
For example, the `TextWidget` implementation in the core is essentially a wrapper around `BaseInputTemplate`, obtained from the registry. Each theme can implement its own version of `BaseInputTemplate` without requiring a different implementation for `TextWidget`.
|
|
240
|
+
|
|
241
|
+
If you wish to customize the implementation for `<input>`-based widgets, you can modify this template. For instance, if you have a `CustomTextInput` component that you want to integrate:
|
|
242
|
+
|
|
243
|
+
```jsx
|
|
244
|
+
import { ChangeEvent, FocusEvent } from 'react';
|
|
245
|
+
import { getInputProps, RJSFSchema, BaseInputTemplateProps } from '@rjsf/utils';
|
|
246
|
+
import validator from '@rjsf/validator-ajv8';
|
|
247
|
+
|
|
248
|
+
import CustomTextInput from '../CustomTextInput';
|
|
249
|
+
|
|
250
|
+
const schema: RJSFSchema = {
|
|
251
|
+
type: 'string',
|
|
252
|
+
title: 'My input',
|
|
253
|
+
description: 'Input description',
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
function BaseInputTemplate(props: BaseInputTemplateProps) {
|
|
257
|
+
const {
|
|
258
|
+
schema,
|
|
259
|
+
id,
|
|
260
|
+
options,
|
|
261
|
+
label,
|
|
262
|
+
value,
|
|
263
|
+
type,
|
|
264
|
+
placeholder,
|
|
265
|
+
required,
|
|
266
|
+
disabled,
|
|
267
|
+
readonly,
|
|
268
|
+
autofocus,
|
|
269
|
+
onChange,
|
|
270
|
+
onChangeOverride,
|
|
271
|
+
onBlur,
|
|
272
|
+
onFocus,
|
|
273
|
+
rawErrors,
|
|
274
|
+
hideError,
|
|
275
|
+
uiSchema,
|
|
276
|
+
registry,
|
|
277
|
+
formContext,
|
|
278
|
+
...rest
|
|
279
|
+
} = props;
|
|
280
|
+
const onTextChange = ({ target: { value: val } }: ChangeEvent<HTMLInputElement>) => {
|
|
281
|
+
// Use the options.emptyValue if it is specified and newVal is also an empty string
|
|
282
|
+
onChange(val === '' ? options.emptyValue || '' : val);
|
|
283
|
+
};
|
|
284
|
+
const onTextBlur = ({ target: { value: val } }: FocusEvent<HTMLInputElement>) => onBlur(id, val);
|
|
285
|
+
const onTextFocus = ({ target: { value: val } }: FocusEvent<HTMLInputElement>) => onFocus(id, val);
|
|
286
|
+
|
|
287
|
+
const inputProps = { ...rest, ...getInputProps(schema, type, options) };
|
|
288
|
+
const hasError = rawErrors.length > 0 && !hideError;
|
|
289
|
+
|
|
290
|
+
return (
|
|
291
|
+
<CustomTextInput
|
|
292
|
+
id={id}
|
|
293
|
+
label={label}
|
|
294
|
+
value={value}
|
|
295
|
+
placeholder={placeholder}
|
|
296
|
+
disabled={disabled}
|
|
297
|
+
readOnly={readonly}
|
|
298
|
+
autoFocus={autofocus}
|
|
299
|
+
error={hasError}
|
|
300
|
+
errors={hasError ? rawErrors : undefined}
|
|
301
|
+
onChange={onChangeOverride || onTextChange}
|
|
302
|
+
onBlur={onTextBlur}
|
|
303
|
+
onFocus={onTextFocus}
|
|
304
|
+
{...inputProps}
|
|
305
|
+
/>
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
render(
|
|
310
|
+
<Form schema={schema} validator={validator} templates={{ BaseInputTemplate }} />,
|
|
311
|
+
document.getElementById('app'),
|
|
312
|
+
);
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
In some cases, you may need to pass additional properties to the existing `BaseInputTemplate`. The approach varies based on whether you are using the core or some other theme, such as mui:
|
|
316
|
+
|
|
317
|
+
```jsx
|
|
318
|
+
import { BaseInputTemplateProps } from '@rjsf/utils';
|
|
319
|
+
import { getDefaultRegistry } from '@rjsf/core';
|
|
320
|
+
import { Templates } from '@rjsf/mui';
|
|
321
|
+
|
|
322
|
+
const {
|
|
323
|
+
templates: { BaseInputTemplate },
|
|
324
|
+
} = getDefaultRegistry(); // To get templates from core
|
|
325
|
+
// const { BaseInputTemplate } = Templates; // To get templates from a theme do this
|
|
326
|
+
|
|
327
|
+
function MyBaseInputTemplate(props: BaseInputTemplateProps) {
|
|
328
|
+
const customProps = {};
|
|
329
|
+
// get your custom props from where you need to
|
|
330
|
+
return <BaseInputTemplate {...props} {...customProps} />;
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
For more detailed documentation, you can refer to [React JSONSchema Form Docs](https://rjsf-team.github.io/react-jsonschema-form/docs).
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# SlotFill Plugin System Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The SlotFill Plugin system is a dynamic mechanism used to inject and manage UI components in a highly modularized and pluggable way. This document explains the SlotFill concept, its purpose, how to use it, and provides examples of its implementation.
|
|
6
|
+
|
|
7
|
+
## What is SlotFill?
|
|
8
|
+
|
|
9
|
+
The SlotFill system allows developers to define "Slots" in the UI where "Fills" can be dynamically injected. This pattern is commonly used to extend the functionality of an application without directly modifying its core components. Slots act as placeholders, while Fills are the components rendered in those placeholders.
|
|
10
|
+
|
|
11
|
+
## Key Components
|
|
12
|
+
|
|
13
|
+
### 1. Slot
|
|
14
|
+
|
|
15
|
+
A Slot is a placeholder that defines where UI components (Fills) will be rendered.
|
|
16
|
+
|
|
17
|
+
### 2. Fill
|
|
18
|
+
|
|
19
|
+
A Fill is the actual UI component that is injected into the Slot.
|
|
20
|
+
|
|
21
|
+
## Implementation Details
|
|
22
|
+
|
|
23
|
+
The SlotFill system is implemented using the `@common-stack/components-pro` library, which provides Slot and Fill components.
|
|
24
|
+
|
|
25
|
+
## Example: Creating a Slot and Fill
|
|
26
|
+
|
|
27
|
+
Here's an example of creating a Slot and Fill for a dashboard:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import * as React from 'react';
|
|
31
|
+
import { Fill, Slot } from '@common-stack/components-pro';
|
|
32
|
+
import { SlotFillEnum } from 'common';
|
|
33
|
+
|
|
34
|
+
// Use the generated enum instead of hardcoded strings
|
|
35
|
+
export const DashboardSlot = (props) => {
|
|
36
|
+
return <Slot name={SlotFillEnum.DASHBOARD_SLOT_FILL} fillProps={{ active: true, ...props }} />;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const DashboardFill = ({ children, ...rest }) => {
|
|
40
|
+
return (
|
|
41
|
+
<Fill {...rest} name={SlotFillEnum.DASHBOARD_SLOT_FILL}>
|
|
42
|
+
{children}
|
|
43
|
+
</Fill>
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Usage Example
|
|
49
|
+
|
|
50
|
+
To use the DashboardSlot and DashboardFill, follow these steps:
|
|
51
|
+
|
|
52
|
+
### Step 1: Define the Slot
|
|
53
|
+
|
|
54
|
+
Include the DashboardSlot component in your application where you want the UI components to appear.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<DashboardSlot />
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Step 2: Create a Fill
|
|
61
|
+
|
|
62
|
+
Create a UI component that uses the DashboardFill to render its content.
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
<DashboardFill>
|
|
66
|
+
<div>Your dynamic content here</div>
|
|
67
|
+
</DashboardFill>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Advanced SlotFill Integration
|
|
71
|
+
|
|
72
|
+
For more dynamic use cases, such as integrating with route-based plugins, you can use the WithPluginArea component:
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
import { RouteBasedPluginArea, registerRouteBasePlugin, unregisterRouteBasePlugin } from '@common-stack/client-react';
|
|
76
|
+
|
|
77
|
+
export const WithPluginArea = (props: IWithPluginArea): React.ReactElement => {
|
|
78
|
+
const { baseRoute, fillsToRegister, shouldRenderRoutes = true } = props;
|
|
79
|
+
const [registerFill, setRegisterFill] = useState<IFill>();
|
|
80
|
+
const location = useLocation();
|
|
81
|
+
|
|
82
|
+
useLayoutEffect(() => {
|
|
83
|
+
const { pathname } = location;
|
|
84
|
+
const fillName = pathname.split('/').pop();
|
|
85
|
+
const fillToRegister = fillsToRegister.find(({ name }) => name === fillName);
|
|
86
|
+
|
|
87
|
+
if (fillToRegister) {
|
|
88
|
+
registerRouteBasePlugin(fillToRegister.name, {
|
|
89
|
+
...fillToRegister,
|
|
90
|
+
render: () => prepareFill(fillToRegister),
|
|
91
|
+
});
|
|
92
|
+
setRegisterFill(fillToRegister);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return () => {
|
|
96
|
+
if (registerFill) {
|
|
97
|
+
unregisterRouteBasePlugin(registerFill.name);
|
|
98
|
+
setRegisterFill(undefined);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}, [location]);
|
|
102
|
+
|
|
103
|
+
if (!registerFill) {
|
|
104
|
+
return <></>;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<>
|
|
109
|
+
<RouteBasedPluginArea />
|
|
110
|
+
{shouldRenderRoutes &&
|
|
111
|
+
fillsToRegister.map((fill) => (
|
|
112
|
+
<Route
|
|
113
|
+
key={fill.name}
|
|
114
|
+
path={`${baseRoute}${fill.name}`}
|
|
115
|
+
element={<Slot name={fill.name} fillProps={{ active: true }} />}
|
|
116
|
+
/>
|
|
117
|
+
))}
|
|
118
|
+
</>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Naming Convention and Enum Types
|
|
124
|
+
|
|
125
|
+
When working with the SlotFill system, it's important to understand the distinction between two different enum types:
|
|
126
|
+
|
|
127
|
+
1. **SlotFillPluginName**:
|
|
128
|
+
- Used specifically for plugin identification in Feature components
|
|
129
|
+
- Ensures uniqueness when multiple features are merged
|
|
130
|
+
- Used in the `componentFillPlugins` array of a Feature
|
|
131
|
+
|
|
132
|
+
2. **SlotFillEnum**:
|
|
133
|
+
- Used for slot and fill name identification
|
|
134
|
+
- Ensures consistent naming between matching slots and fills
|
|
135
|
+
- Used in the `name` prop of Slot and Fill components
|
|
136
|
+
|
|
137
|
+
### Example: Using the Correct Enum Types
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
// In Feature definition
|
|
141
|
+
import { Feature } from '@common-stack/client-react';
|
|
142
|
+
import { SlotFillPluginName } from 'common';
|
|
143
|
+
import { AsanaIntegrationFill } from './components/Asana/AsanaIntegrationFill';
|
|
144
|
+
|
|
145
|
+
export default new Feature({
|
|
146
|
+
componentFillPlugins: [
|
|
147
|
+
{
|
|
148
|
+
// Use SlotFillPluginName for unique plugin identification
|
|
149
|
+
name: SlotFillPluginName.ASANA_INTEGRATION_PLUGIN,
|
|
150
|
+
render: AsanaIntegrationFill,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// In Slot and Fill components
|
|
156
|
+
import { Slot, Fill } from '@common-stack/components-pro';
|
|
157
|
+
import { SlotFillEnum } from 'common';
|
|
158
|
+
|
|
159
|
+
// Use SlotFillEnum for Slot name
|
|
160
|
+
export const AsanaIntegrationsSlot = (props) => {
|
|
161
|
+
return <Slot name={SlotFillEnum.ASANA_INTEGRATION_SLOT_FILL} fillProps={{ active: true, ...props }} />;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// Use matching SlotFillEnum for Fill name to match its slot
|
|
165
|
+
export const AsanaIntegrationFill = ({ children, ...rest }) => {
|
|
166
|
+
return (
|
|
167
|
+
<Fill name={SlotFillEnum.ASANA_INTEGRATION_SLOT_FILL} {...rest}>
|
|
168
|
+
{children}
|
|
169
|
+
</Fill>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Benefits of Using SlotFill
|
|
175
|
+
|
|
176
|
+
- **Modularity**: Easily extend and modify UI components without changing core code.
|
|
177
|
+
- **Dynamic Loading**: Inject components dynamically based on routes or conditions.
|
|
178
|
+
- **Reusability**: Use the same SlotFill components across different parts of the application.
|
|
179
|
+
|
|
180
|
+
## Integrating SlotFill with the Feature Component
|
|
181
|
+
|
|
182
|
+
The `Feature` component allows you to dynamically register components into predefined slots using `componentFillPlugins`. This is used to organize and inject UI components into specific areas defined by the application.
|
|
183
|
+
|
|
184
|
+
### Purpose
|
|
185
|
+
|
|
186
|
+
By passing `componentFillPlugins` into a `Feature`, you can dynamically inject components into predefined slots. Each plugin is identified by a unique name and renders a specified component.
|
|
187
|
+
|
|
188
|
+
### Example: Defining a Feature with Component Fill Plugins
|
|
189
|
+
|
|
190
|
+
Here's an example of a `Feature` that uses `componentFillPlugins`:
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
import { Feature } from '@common-stack/client-react';
|
|
194
|
+
import { SlotFillPluginName } from 'common';
|
|
195
|
+
import { AsanaIntegrationFill } from './components/Asana/AsanaIntegrationFill';
|
|
196
|
+
import { PasswordHandlerFill } from './components/Password/PasswordHandlerFill';
|
|
197
|
+
|
|
198
|
+
export default new Feature({
|
|
199
|
+
componentFillPlugins: [
|
|
200
|
+
{
|
|
201
|
+
name: SlotFillPluginName.ASANA_INTEGRATION_SLOT_FILL,
|
|
202
|
+
render: AsanaIntegrationFill,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: SlotFillPluginName.PASSWORD_HANDLER_SLOT_FILL,
|
|
206
|
+
render: PasswordHandlerFill,
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Key Points
|
|
213
|
+
|
|
214
|
+
1. **`componentFillPlugins` Array**:
|
|
215
|
+
- Each plugin is an object with the following properties:
|
|
216
|
+
- `name`: A unique identifier for the slot where the component will be injected.
|
|
217
|
+
- `render`: The React component to render in the slot.
|
|
218
|
+
|
|
219
|
+
Example:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
{
|
|
223
|
+
name: SlotFillPluginName.ASANA_INTEGRATION_SLOT_FILL,
|
|
224
|
+
render: AsanaIntegrationFill,
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
2. **Predefined Slot Names**:
|
|
229
|
+
- Slot names like `ASANA_INTEGRATION_SLOT_FILL` are defined in the SlotFillPluginName enum and map to specific areas in the application where components can be injected.
|
|
230
|
+
|
|
231
|
+
3. **Dynamic Component Injection**:
|
|
232
|
+
- The `Feature` dynamically registers and renders these components in the corresponding slots at runtime.
|
|
233
|
+
|
|
234
|
+
### Example: Integration with Slots and Fills
|
|
235
|
+
|
|
236
|
+
Using SlotFillEnum for slot and fill components:
|
|
237
|
+
|
|
238
|
+
#### Defining the Slot
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
import { Slot } from '@common-stack/components-pro';
|
|
242
|
+
import { SlotFillEnum } from 'common';
|
|
243
|
+
|
|
244
|
+
export const AsanaIntegrationsSlot = (props) => {
|
|
245
|
+
return <Slot name={SlotFillEnum.ASANA_INTEGRATION_SLOT_FILL} fillProps={{ active: true, ...props }} />;
|
|
246
|
+
};
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Defining the Fill
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
import { Fill } from '@common-stack/components-pro';
|
|
253
|
+
import { SlotFillEnum } from 'common';
|
|
254
|
+
|
|
255
|
+
export const AsanaIntegrationFill = ({ children, ...rest }) => {
|
|
256
|
+
return (
|
|
257
|
+
<Fill name={SlotFillEnum.ASANA_INTEGRATION_SLOT_FILL} {...rest}>
|
|
258
|
+
{children}
|
|
259
|
+
</Fill>
|
|
260
|
+
);
|
|
261
|
+
};
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Managing SlotFill Plugin Names with GraphQL Codegen
|
|
265
|
+
|
|
266
|
+
To ensure that SlotFill plugin names are generated from GraphQL Codegen and added to the `extend enum SlotFillPluginName`, follow these steps:
|
|
267
|
+
|
|
268
|
+
### Purpose
|
|
269
|
+
|
|
270
|
+
By centralizing SlotFillPluginName definitions in an extended GraphQL enum, you ensure:
|
|
271
|
+
|
|
272
|
+
- **Consistency**: All plugin names are defined in one place.
|
|
273
|
+
- **Maintainability**: Developers can easily locate and update plugin names.
|
|
274
|
+
- **Automation**: Plugin names are automatically generated alongside other GraphQL types.
|
|
275
|
+
|
|
276
|
+
### Implementation Steps
|
|
277
|
+
|
|
278
|
+
#### 1. Define the SlotFillPluginName Enum in Your GraphQL Schema
|
|
279
|
+
|
|
280
|
+
Add an enum definition to your GraphQL schema to list all plugin names:
|
|
281
|
+
|
|
282
|
+
```graphql
|
|
283
|
+
extend enum SlotFillPluginName {
|
|
284
|
+
DASHBOARD_SLOT_FILL
|
|
285
|
+
PAYMENT_INTEGRATIONS_SLOT_FILL
|
|
286
|
+
GITHUB_INTEGRATION_CONFIG_SLOT_FILL
|
|
287
|
+
# Add other plugin names here
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### 3. Generate Plugin Names Using GraphQL Code Generator
|
|
292
|
+
|
|
293
|
+
Update your GraphQL Codegen configuration to include the SlotFillPluginName enum in the generated types.
|
|
294
|
+
|
|
295
|
+
run `yarn generateGraphql`
|
|
296
|
+
|
|
297
|
+
This will ensure the SlotFillPluginName is included in the generated TypeScript types.
|
|
298
|
+
|
|
299
|
+
#### 4. Use Generated Enums in Your Codebase
|
|
300
|
+
|
|
301
|
+
❌ **DO NOT** use hardcoded strings for slot names or plugin identifiers:
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
// AVOID: Don't use hardcoded strings for slot names
|
|
305
|
+
<Slot name="dashboard-slot-fill" />
|
|
306
|
+
|
|
307
|
+
// AVOID: Don't use hardcoded strings for plugin names
|
|
308
|
+
componentFillPlugins: [{ name: "dashboard-plugin" }]
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
✅ **DO** use the generated enum values from GraphQL:
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
// For Slot and Fill components
|
|
315
|
+
import { SlotFillEnum } from 'common';
|
|
316
|
+
<Slot name={SlotFillEnum.DASHBOARD_SLOT_FILL} />
|
|
317
|
+
|
|
318
|
+
// For Feature componentFillPlugins
|
|
319
|
+
import { SlotFillPluginName } from 'common';
|
|
320
|
+
componentFillPlugins: [{ name: SlotFillPluginName.DASHBOARD_PLUGIN }]
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
#### 5. Validate the Centralization
|
|
324
|
+
|
|
325
|
+
Ensure all plugin names are defined and used through the SlotFillPluginName enum. You can do this by:
|
|
326
|
+
|
|
327
|
+
- Searching for hardcoded plugin names in your codebase.
|
|
328
|
+
- Replacing them with references to the generated enum.
|
|
329
|
+
|
|
330
|
+
### Benefits of This Approach
|
|
331
|
+
|
|
332
|
+
- **Single Source of Truth**: All SlotFill plugin names exist in one place, the GraphQL schema.
|
|
333
|
+
- **Code Quality**: By using enums, you reduce the risk of typos or inconsistencies.
|
|
334
|
+
- **Automation**: GraphQL Codegen ensures enums are up-to-date and accurately represented in your codebase.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Facebook Setup
|
|
4
|
+
description: Facebook Setup
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Facebook Setup ...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Facebook Setup
|
|
13
|
+
|
|
14
|
+
Inorder to setup facebook login for application. Following steps should be followed.
|
|
15
|
+
|
|
16
|
+
1. Login to https://developers.facebook.com
|
|
17
|
+
2. Setup a application by clicking on create new application.
|
|
18
|
+
3. Once setup, Click on Facebook/settings from sidebar.
|
|
19
|
+
4. Set `Embedded Browser OAuth Login` option to true.
|
|
20
|
+
5. Under Valid OAuth Redirect URIs set `https://dev-cdebase.auth0.com/login/callback`
|
|
21
|
+
6. Save the settings.
|
|
22
|
+
7. Copy the client_id and client_secret from Settings/Basic option available in sidebar and setup the integration on auth0 social accounts.
|
|
23
|
+
|
|
24
|
+
# Troubleshoot
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
[11:26 PM] Redirect uri should be same on frontend and backend "AUTH0_NATIVE_REDIRECT_URL":"myapp://redirect",
|
|
28
|
+
Check for AUTH0_NATIVE_CLIENT_ID it should be same on backend and frontend
|
|
29
|
+
Check for AUTH0_TOKEN_GRANTED_TIME and DEFAULT_EXTENDED_RENEWAL_TIME
|
|
30
|
+
Check for AUTH0_CUSTOM_DOMAIN needs to be a valid domain also should be same on frontend and backend`
|
|
31
|
+
```
|