@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,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Don't write network requests over the sub components.
|
|
4
|
+
description: Don't write network requests over the sub components.
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Don't write network requests over the sub components....
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
### Don't Do Case
|
|
13
|
+
|
|
14
|
+
#### SubComponent with GraphQL Query
|
|
15
|
+
|
|
16
|
+
In this case, the `SubComponent` handles the GraphQL query directly, which should be avoided:
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
// SubComponent.js
|
|
20
|
+
import { gql, useQuery } from '@apollo/client';
|
|
21
|
+
|
|
22
|
+
const GET_USERS = gql`
|
|
23
|
+
query GetUsers {
|
|
24
|
+
users {
|
|
25
|
+
id
|
|
26
|
+
name
|
|
27
|
+
email
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
|
|
32
|
+
function SubComponent() {
|
|
33
|
+
const { data, loading, error } = useQuery(GET_USERS);
|
|
34
|
+
|
|
35
|
+
if (loading) return <p>Loading...</p>;
|
|
36
|
+
if (error) return <p>Error: {error.message}</p>;
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div>
|
|
40
|
+
<h1>Users</h1>
|
|
41
|
+
<ul>
|
|
42
|
+
{data.users.map((user) => (
|
|
43
|
+
<li key={user.id}>
|
|
44
|
+
{user.name} ({user.email})
|
|
45
|
+
</li>
|
|
46
|
+
))}
|
|
47
|
+
</ul>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default SubComponent;
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
#### Main Page Importing SubComponent
|
|
56
|
+
|
|
57
|
+
The main page simply imports and uses `SubComponent`, without handling the data fetching properly.
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
// mainPage.js
|
|
61
|
+
import SubComponent from './SubComponent';
|
|
62
|
+
|
|
63
|
+
export default function MainPage() {
|
|
64
|
+
return (
|
|
65
|
+
<div>
|
|
66
|
+
<SubComponent />
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Do Case
|
|
73
|
+
|
|
74
|
+
#### Step-by-Step Refactor
|
|
75
|
+
|
|
76
|
+
1. **Define the GraphQL Query in the Main Page**
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
// mainPage.js
|
|
80
|
+
import { gql } from '@apollo/client';
|
|
81
|
+
|
|
82
|
+
const GET_USERS = gql`
|
|
83
|
+
query GetUsers {
|
|
84
|
+
users {
|
|
85
|
+
id
|
|
86
|
+
name
|
|
87
|
+
email
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
`;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
2. **Set Up the Loader Function**
|
|
94
|
+
|
|
95
|
+
```javascript
|
|
96
|
+
// mainPage.js
|
|
97
|
+
import { json, LoaderFunction } from '@remix-run/node';
|
|
98
|
+
import { useLoaderData } from '@remix-run/react';
|
|
99
|
+
import { initializeApollo } from '~/utils/apolloClient'; // Utility to initialize Apollo Client
|
|
100
|
+
import SubComponent from './SubComponent';
|
|
101
|
+
|
|
102
|
+
// instead you can also use graphql Query directly with fetch policy set to cache-only to auto generate loaders as described in `generated-data-loaders`
|
|
103
|
+
export let loader: LoaderFunction = async () => {
|
|
104
|
+
const client = initializeApollo();
|
|
105
|
+
try {
|
|
106
|
+
const { data } = await client.query({ query: GET_USERS });
|
|
107
|
+
return json(data);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error('Error fetching users:', error);
|
|
110
|
+
throw new Response('Error fetching users', { status: 500 });
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
3. **Create the SubComponent as a Pure Component**
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
// SubComponent.js
|
|
119
|
+
function SubComponent({ users }) {
|
|
120
|
+
return (
|
|
121
|
+
<div>
|
|
122
|
+
<h1>Users</h1>
|
|
123
|
+
<ul>
|
|
124
|
+
{users.map((user) => (
|
|
125
|
+
<li key={user.id}>
|
|
126
|
+
{user.name} ({user.email})
|
|
127
|
+
</li>
|
|
128
|
+
))}
|
|
129
|
+
</ul>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export default SubComponent;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
4. **Use the SubComponent in the Main Page**
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
// mainPage.js
|
|
141
|
+
import { useLoaderData } from '@remix-run/react';
|
|
142
|
+
import SubComponent from './SubComponent';
|
|
143
|
+
|
|
144
|
+
export default function MainPage() {
|
|
145
|
+
const { users } = useLoaderData();
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<div>
|
|
149
|
+
<SubComponent users={users} />
|
|
150
|
+
</div>
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Summary
|
|
156
|
+
|
|
157
|
+
**Don't Do Case:**
|
|
158
|
+
|
|
159
|
+
- Placing GraphQL queries inside subcomponents makes it harder to manage data flow and breaks SSR benefits.
|
|
160
|
+
- Subcomponents are not pure and are tightly coupled with data-fetching logic.
|
|
161
|
+
|
|
162
|
+
**Do Case:**
|
|
163
|
+
|
|
164
|
+
- GraphQL queries are centralized in the main routed page's loader.
|
|
165
|
+
- Data fetching is handled during SSR, improving performance.
|
|
166
|
+
- Subcomponents are kept pure and receive data via props, making them more reusable and easier to test.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Generated Data Loaders
|
|
4
|
+
description: Generated Data Loaders
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Generated Data Loaders...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Generated Data Loaders
|
|
13
|
+
|
|
14
|
+
To minimize repetitive work, we automatically generate Remix data loaders by analyzing the page source code. Our parser scans the page for GraphQL queries and calls all of those queries in the generated data loaders.
|
|
15
|
+
|
|
16
|
+
## How It Works
|
|
17
|
+
|
|
18
|
+
1. The parser analyzes the component code and detects GraphQL queries.
|
|
19
|
+
2. It creates a key-value pair where the key represents the GraphQL document the query uses, and the value refers to the variables used by the query.
|
|
20
|
+
3. This information is used to generate both server and client loaders.
|
|
21
|
+
|
|
22
|
+
## Example
|
|
23
|
+
|
|
24
|
+
Consider this component:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// Teams.tsx
|
|
28
|
+
const Teams = (props) => {
|
|
29
|
+
const [data, { loading }] = useTeamsQuery({ variables: { orgName, pageSize: 10 } });
|
|
30
|
+
// rest of the business logic
|
|
31
|
+
return (
|
|
32
|
+
// component render Markup
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The generated `routes.json` structure will look like this:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"queries": {
|
|
42
|
+
"TeamsDocument": "{orgName: params.orgName, pageSize: 10}"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Generated Loaders
|
|
48
|
+
|
|
49
|
+
The generator function uses this meta-information to create loaders for both server and client:
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
export const loaders = ({ params, context }) => {
|
|
53
|
+
const { apolloClient: client } = context;
|
|
54
|
+
const queries = { GetTeamsDocument: { orgName: params.orgName, pageSize: 10 } };
|
|
55
|
+
|
|
56
|
+
const organizationTeamsQuery = client.query({
|
|
57
|
+
query: GetTeamsDocument,
|
|
58
|
+
variables: queries['GetTeamsDocument'],
|
|
59
|
+
fetchPolicy: __SERVER__ ? 'network-only' : 'cache-first',
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
data: {
|
|
64
|
+
organizationTeamsQuery,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const clientLoader = async ({ params, serverLoader }) => {
|
|
70
|
+
const client = window.__APOLLO_CLIENT__;
|
|
71
|
+
try {
|
|
72
|
+
const getKey = (documentName) => camelCase(documentName).replace('Document', '');
|
|
73
|
+
const queries = { GetTeamsDocument: { orgName: params.orgName, pageSize: 10 } };
|
|
74
|
+
const queryKeys = ['TeamsQuery'];
|
|
75
|
+
let shouldCallServerLoader = false;
|
|
76
|
+
let response = {};
|
|
77
|
+
let cachedData, cacheKey;
|
|
78
|
+
|
|
79
|
+
cachedData = client.cache.readQuery({
|
|
80
|
+
query: GetTeamsDocument,
|
|
81
|
+
variables: queries['GetTeamsDocument'],
|
|
82
|
+
});
|
|
83
|
+
cacheKey = getKey('GetTeamsDocument');
|
|
84
|
+
|
|
85
|
+
if (!cachedData) {
|
|
86
|
+
shouldCallServerLoader = true;
|
|
87
|
+
}
|
|
88
|
+
if (cachedData && cachedData[cacheKey]) {
|
|
89
|
+
response[queryKeys[0]] = Promise.resolve(cachedData[cacheKey]);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!shouldCallServerLoader) return response;
|
|
93
|
+
const serverData = await serverLoader();
|
|
94
|
+
let queryKey = queryKeys[0];
|
|
95
|
+
|
|
96
|
+
if (!serverData[queryKey].then) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
serverData[queryKey].then(({ data }) => {
|
|
100
|
+
client.cache.writeQuery({
|
|
101
|
+
query: GetTeamsDocument,
|
|
102
|
+
variables: queries['GetTeamsDocument'],
|
|
103
|
+
data,
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return serverData;
|
|
108
|
+
} catch (err) {
|
|
109
|
+
console.error('Error in clientLoader', err);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
This approach ensures that by the time the component requests the data, it is already available in the Apollo Cache, reducing redundancy and improving performance.
|
|
115
|
+
|
|
116
|
+
## Related Topics
|
|
117
|
+
|
|
118
|
+
- For detailed parameter generation, see [Query Params Generator](query-params-generator.md)
|
|
119
|
+
- For automated loader generation, see [Generated Data Loaders](generated-data-loaders.md)
|
|
120
|
+
- For authentication integration, see [Authentication and Authorization](routes-json-auth.md)
|
|
121
|
+
|
|
122
|
+
[Back to Index](routes-json-index.md) | [Previous: Advanced Configurations](routes-json-advanced.md) | [Next: Query Parameters Generator](query-params-generator.md)
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Generated Resource Loaders
|
|
4
|
+
description: Generated Resource Loaders
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Generated Resource Loaders...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Resource Routes in Generated Data Loaders
|
|
13
|
+
|
|
14
|
+
## Resource Routes Overview
|
|
15
|
+
|
|
16
|
+
Resource routes are special routes that require resolved data rather than deferred promises. They are commonly used for API endpoints, data fetching routes, and other scenarios where immediate data resolution is required.
|
|
17
|
+
|
|
18
|
+
## Configuration
|
|
19
|
+
|
|
20
|
+
### routes.json Configuration
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"/api/teams": {
|
|
25
|
+
"isResourceRoute": true,
|
|
26
|
+
"resourceUri": "teams",
|
|
27
|
+
"queries": {
|
|
28
|
+
"GetTeamsDocument": "{orgName: params.orgName}"
|
|
29
|
+
},
|
|
30
|
+
"middlewares": ["@your-package/middleware/configurations"]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### GraphQL Query Definition
|
|
36
|
+
|
|
37
|
+
```graphql
|
|
38
|
+
query GetTeams($orgName: String!) {
|
|
39
|
+
teams(orgName: $orgName) {
|
|
40
|
+
id
|
|
41
|
+
name
|
|
42
|
+
members {
|
|
43
|
+
id
|
|
44
|
+
name
|
|
45
|
+
role
|
|
46
|
+
}
|
|
47
|
+
settings {
|
|
48
|
+
isPublic
|
|
49
|
+
allowInvites
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Generated Loader
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { json } from '@remix-run/node';
|
|
59
|
+
import { GetTeamsDocument } from './graphql/teams.generated';
|
|
60
|
+
|
|
61
|
+
export const loader = async ({ context, params }) => {
|
|
62
|
+
const loaderErrors = [];
|
|
63
|
+
let defaultLoaderData = {};
|
|
64
|
+
|
|
65
|
+
// Configuration middleware
|
|
66
|
+
const middlewareStack = [];
|
|
67
|
+
const { apolloClient: client } = context;
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
// Execute queries with immediate resolution
|
|
71
|
+
const teamsResult = await client.query({
|
|
72
|
+
query: GetTeamsDocument,
|
|
73
|
+
variables: { orgName: params.orgName },
|
|
74
|
+
fetchPolicy: 'network-only',
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
defaultLoaderData = {
|
|
78
|
+
teams: teamsResult.data.teams,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Execute middleware if configured
|
|
82
|
+
if (options.resourceUri) {
|
|
83
|
+
const { configurations } = await executeConfigurationMiddleware(params);
|
|
84
|
+
defaultLoaderData.configurations = configurations;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return json({
|
|
88
|
+
...defaultLoaderData,
|
|
89
|
+
errors: loaderErrors,
|
|
90
|
+
});
|
|
91
|
+
} catch (error) {
|
|
92
|
+
loaderErrors.push(error);
|
|
93
|
+
return json({ errors: loaderErrors }, { status: 500 });
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Example Usage
|
|
99
|
+
|
|
100
|
+
### Resource Route Component
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// app/routes/api/teams.ts
|
|
104
|
+
import { useLoaderData } from '@remix-run/react';
|
|
105
|
+
import type { Team } from '~/types';
|
|
106
|
+
|
|
107
|
+
interface LoaderData {
|
|
108
|
+
teams: Team[];
|
|
109
|
+
configurations?: {
|
|
110
|
+
maxTeamSize: number;
|
|
111
|
+
features: string[];
|
|
112
|
+
};
|
|
113
|
+
errors?: Array<{ message: string }>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export default function TeamsResource() {
|
|
117
|
+
const { teams, configurations, errors } = useLoaderData<LoaderData>();
|
|
118
|
+
|
|
119
|
+
if (errors?.length) {
|
|
120
|
+
return json(
|
|
121
|
+
{
|
|
122
|
+
error: 'Failed to load teams data',
|
|
123
|
+
details: errors,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
status: 500,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return json({
|
|
132
|
+
teams,
|
|
133
|
+
settings: configurations,
|
|
134
|
+
timestamp: new Date().toISOString(),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Consuming Component
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// app/routes/teams/index.tsx
|
|
143
|
+
import { useEffect, useState } from 'react';
|
|
144
|
+
|
|
145
|
+
export default function TeamsPage() {
|
|
146
|
+
const [teams, setTeams] = useState<Team[]>([]);
|
|
147
|
+
const [loading, setLoading] = useState(true);
|
|
148
|
+
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
async function fetchTeams() {
|
|
151
|
+
try {
|
|
152
|
+
const response = await fetch('/api/teams?orgName=acme');
|
|
153
|
+
const data = await response.json();
|
|
154
|
+
setTeams(data.teams);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.error('Failed to fetch teams:', error);
|
|
157
|
+
} finally {
|
|
158
|
+
setLoading(false);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
fetchTeams();
|
|
163
|
+
}, []);
|
|
164
|
+
|
|
165
|
+
if (loading) return <div>Loading teams...</div>;
|
|
166
|
+
|
|
167
|
+
return (
|
|
168
|
+
<div>
|
|
169
|
+
<h1>Teams</h1>
|
|
170
|
+
<div className="teams-grid">
|
|
171
|
+
{teams.map((team) => (
|
|
172
|
+
<TeamCard key={team.id} team={team} maxSize={data.configurations?.maxTeamSize} />
|
|
173
|
+
))}
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// TeamCard component
|
|
180
|
+
const TeamCard = ({ team, maxSize }) => (
|
|
181
|
+
<div className="team-card">
|
|
182
|
+
<h3>{team.name}</h3>
|
|
183
|
+
<div className="member-count">
|
|
184
|
+
Members: {team.members.length} / {maxSize}
|
|
185
|
+
</div>
|
|
186
|
+
<div className="member-list">
|
|
187
|
+
{team.members.map((member) => (
|
|
188
|
+
<div key={member.id} className="member">
|
|
189
|
+
{member.name} ({member.role})
|
|
190
|
+
</div>
|
|
191
|
+
))}
|
|
192
|
+
</div>
|
|
193
|
+
<div className="team-settings">
|
|
194
|
+
{team.settings.isPublic ? 'Public' : 'Private'} Team
|
|
195
|
+
{team.settings.allowInvites && ' • Invites Enabled'}
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
);
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Using with Forms
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
// app/routes/teams/new.tsx
|
|
205
|
+
import { Form, useActionData } from '@remix-run/react';
|
|
206
|
+
|
|
207
|
+
export default function NewTeam() {
|
|
208
|
+
const actionData = useActionData();
|
|
209
|
+
|
|
210
|
+
return (
|
|
211
|
+
<Form method="post" action="/api/teams">
|
|
212
|
+
<div>
|
|
213
|
+
<label htmlFor="teamName">Team Name:</label>
|
|
214
|
+
<input id="teamName" name="teamName" type="text" required />
|
|
215
|
+
</div>
|
|
216
|
+
<div>
|
|
217
|
+
<label htmlFor="isPublic">
|
|
218
|
+
<input id="isPublic" name="isPublic" type="checkbox" />
|
|
219
|
+
Make team public
|
|
220
|
+
</label>
|
|
221
|
+
</div>
|
|
222
|
+
<button type="submit">Create Team</button>
|
|
223
|
+
{actionData?.errors && (
|
|
224
|
+
<div className="error">
|
|
225
|
+
{actionData.errors.map((error) => (
|
|
226
|
+
<p key={error.message}>{error.message}</p>
|
|
227
|
+
))}
|
|
228
|
+
</div>
|
|
229
|
+
)}
|
|
230
|
+
</Form>
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Key Differences from Regular Routes
|
|
236
|
+
|
|
237
|
+
1. **Data Resolution**
|
|
238
|
+
- All data is resolved before sending response
|
|
239
|
+
- Always returns `json` responses
|
|
240
|
+
- No streaming or deferred loading
|
|
241
|
+
|
|
242
|
+
2. **Error Handling**
|
|
243
|
+
- Errors are collected and returned immediately
|
|
244
|
+
- Appropriate HTTP status codes are set
|
|
245
|
+
- Error details can be included in the response
|
|
246
|
+
|
|
247
|
+
3. **Middleware Integration**
|
|
248
|
+
- Middleware executes synchronously
|
|
249
|
+
- All configurations are resolved before response
|
|
250
|
+
- Results are included in the JSON response
|
|
251
|
+
|
|
252
|
+
4. **Response Format**
|
|
253
|
+
- Structured JSON responses
|
|
254
|
+
- Can include metadata and configurations
|
|
255
|
+
- Suitable for API consumption
|
|
256
|
+
|
|
257
|
+
[Back to Index](routes-json-index.md) | [Previous: Query Parameters Generator](query-params-generator.md) | [Next: CSS Import and Stylesheets](css-import-and-stylesheets.md)
|