@stacksjs/defaults 0.70.206 → 0.70.208
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/TODO.md +21 -0
- package/ai/AGENTS.md +79 -0
- package/ai/README.md +45 -0
- package/ai/claude/launch.json +12 -0
- package/ai/skills/stacks-actions/SKILL.md +128 -0
- package/ai/skills/stacks-ai/SKILL.md +276 -0
- package/ai/skills/stacks-alias/SKILL.md +94 -0
- package/ai/skills/stacks-analytics/SKILL.md +91 -0
- package/ai/skills/stacks-api/SKILL.md +738 -0
- package/ai/skills/stacks-arrays/SKILL.md +277 -0
- package/ai/skills/stacks-auth/SKILL.md +422 -0
- package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
- package/ai/skills/stacks-brandkit/SKILL.md +811 -0
- package/ai/skills/stacks-browse/SKILL.md +127 -0
- package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
- package/ai/skills/stacks-browser/SKILL.md +145 -0
- package/ai/skills/stacks-buddy/SKILL.md +676 -0
- package/ai/skills/stacks-build/SKILL.md +163 -0
- package/ai/skills/stacks-cache/SKILL.md +125 -0
- package/ai/skills/stacks-calendar/SKILL.md +113 -0
- package/ai/skills/stacks-chat/SKILL.md +371 -0
- package/ai/skills/stacks-cli/SKILL.md +112 -0
- package/ai/skills/stacks-cloud/SKILL.md +192 -0
- package/ai/skills/stacks-cms/SKILL.md +217 -0
- package/ai/skills/stacks-collections/SKILL.md +82 -0
- package/ai/skills/stacks-commerce/SKILL.md +114 -0
- package/ai/skills/stacks-composables/SKILL.md +161 -0
- package/ai/skills/stacks-config/SKILL.md +144 -0
- package/ai/skills/stacks-configuration/SKILL.md +154 -0
- package/ai/skills/stacks-cron/SKILL.md +123 -0
- package/ai/skills/stacks-crosswind/SKILL.md +190 -0
- package/ai/skills/stacks-dashboard/SKILL.md +173 -0
- package/ai/skills/stacks-database/SKILL.md +286 -0
- package/ai/skills/stacks-datetime/SKILL.md +269 -0
- package/ai/skills/stacks-dependencies/SKILL.md +111 -0
- package/ai/skills/stacks-deploy/SKILL.md +102 -0
- package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
- package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
- package/ai/skills/stacks-design-output/SKILL.md +55 -0
- package/ai/skills/stacks-design-soft/SKILL.md +156 -0
- package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
- package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
- package/ai/skills/stacks-desktop/SKILL.md +78 -0
- package/ai/skills/stacks-development/SKILL.md +298 -0
- package/ai/skills/stacks-dns/SKILL.md +149 -0
- package/ai/skills/stacks-docs/SKILL.md +109 -0
- package/ai/skills/stacks-email/SKILL.md +236 -0
- package/ai/skills/stacks-enums/SKILL.md +100 -0
- package/ai/skills/stacks-env/SKILL.md +181 -0
- package/ai/skills/stacks-error-handling/SKILL.md +137 -0
- package/ai/skills/stacks-events/SKILL.md +228 -0
- package/ai/skills/stacks-faker/SKILL.md +158 -0
- package/ai/skills/stacks-git/SKILL.md +158 -0
- package/ai/skills/stacks-guard/SKILL.md +98 -0
- package/ai/skills/stacks-health/SKILL.md +75 -0
- package/ai/skills/stacks-http/SKILL.md +316 -0
- package/ai/skills/stacks-i18n/SKILL.md +198 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
- package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
- package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
- package/ai/skills/stacks-investigate/SKILL.md +119 -0
- package/ai/skills/stacks-jobs/SKILL.md +136 -0
- package/ai/skills/stacks-lint/SKILL.md +184 -0
- package/ai/skills/stacks-listeners/SKILL.md +99 -0
- package/ai/skills/stacks-logging/SKILL.md +78 -0
- package/ai/skills/stacks-mail/SKILL.md +120 -0
- package/ai/skills/stacks-middleware/SKILL.md +249 -0
- package/ai/skills/stacks-migrations/SKILL.md +105 -0
- package/ai/skills/stacks-models/SKILL.md +267 -0
- package/ai/skills/stacks-new-feature/SKILL.md +206 -0
- package/ai/skills/stacks-notifications/SKILL.md +210 -0
- package/ai/skills/stacks-objects/SKILL.md +205 -0
- package/ai/skills/stacks-office-hours/SKILL.md +134 -0
- package/ai/skills/stacks-orm/SKILL.md +342 -0
- package/ai/skills/stacks-path/SKILL.md +118 -0
- package/ai/skills/stacks-payments/SKILL.md +373 -0
- package/ai/skills/stacks-plan-review/SKILL.md +152 -0
- package/ai/skills/stacks-plugins/SKILL.md +149 -0
- package/ai/skills/stacks-push/SKILL.md +376 -0
- package/ai/skills/stacks-query-builder/SKILL.md +128 -0
- package/ai/skills/stacks-queue/SKILL.md +559 -0
- package/ai/skills/stacks-realtime/SKILL.md +442 -0
- package/ai/skills/stacks-redesign/SKILL.md +182 -0
- package/ai/skills/stacks-registry/SKILL.md +58 -0
- package/ai/skills/stacks-repl/SKILL.md +80 -0
- package/ai/skills/stacks-retro/SKILL.md +122 -0
- package/ai/skills/stacks-review/SKILL.md +135 -0
- package/ai/skills/stacks-router/SKILL.md +231 -0
- package/ai/skills/stacks-routes/SKILL.md +105 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
- package/ai/skills/stacks-scheduler/SKILL.md +363 -0
- package/ai/skills/stacks-search-engine/SKILL.md +112 -0
- package/ai/skills/stacks-security/SKILL.md +129 -0
- package/ai/skills/stacks-security-audit/SKILL.md +128 -0
- package/ai/skills/stacks-server/SKILL.md +458 -0
- package/ai/skills/stacks-shell/SKILL.md +62 -0
- package/ai/skills/stacks-slug/SKILL.md +87 -0
- package/ai/skills/stacks-sms/SKILL.md +385 -0
- package/ai/skills/stacks-socials/SKILL.md +303 -0
- package/ai/skills/stacks-storage/SKILL.md +576 -0
- package/ai/skills/stacks-strings/SKILL.md +416 -0
- package/ai/skills/stacks-stx/SKILL.md +176 -0
- package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
- package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
- package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
- package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
- package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
- package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
- package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
- package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
- package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
- package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
- package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
- package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
- package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
- package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
- package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
- package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
- package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
- package/ai/skills/stacks-testing/SKILL.md +129 -0
- package/ai/skills/stacks-tunnel/SKILL.md +125 -0
- package/ai/skills/stacks-types/SKILL.md +178 -0
- package/ai/skills/stacks-ui/SKILL.md +246 -0
- package/ai/skills/stacks-utils/SKILL.md +444 -0
- package/ai/skills/stacks-validation/SKILL.md +371 -0
- package/ai/skills/stacks-whois/SKILL.md +315 -0
- package/assets/world-map-data.ts +121 -0
- package/bootstrap.ts +114 -0
- package/docs/api-examples.md +46 -0
- package/docs/index.md +24 -0
- package/docs/markdown-examples.md +87 -0
- package/functions/analytics.ts +97 -0
- package/functions/api.ts +143 -0
- package/functions/auth.ts +208 -0
- package/functions/billing/payments.ts +149 -0
- package/functions/blog.ts +120 -0
- package/functions/cms/categorizables.ts +107 -0
- package/functions/cms/pages.ts +108 -0
- package/functions/cms/posts.ts +100 -0
- package/functions/cms/taggables.ts +102 -0
- package/functions/commerce/coupons.ts +128 -0
- package/functions/commerce/customers.ts +128 -0
- package/functions/commerce/gift-cards.ts +119 -0
- package/functions/commerce/orders.ts +112 -0
- package/functions/commerce/payments.ts +119 -0
- package/functions/commerce/products/categories.ts +123 -0
- package/functions/commerce/products/manufacturers.ts +123 -0
- package/functions/commerce/products/products.ts +123 -0
- package/functions/commerce/products/reviews.ts +123 -0
- package/functions/commerce/products/units.ts +123 -0
- package/functions/commerce/products/variants.ts +123 -0
- package/functions/commerce/shippings/delivery-routes.ts +123 -0
- package/functions/commerce/shippings/digital-deliveries.ts +119 -0
- package/functions/commerce/shippings/drivers.ts +123 -0
- package/functions/commerce/shippings/license-keys.ts +123 -0
- package/functions/commerce/shippings/shipping-methods.ts +123 -0
- package/functions/commerce/shippings/shipping-rates.ts +119 -0
- package/functions/commerce/shippings/shipping-zones.ts +119 -0
- package/functions/commerce/taxes.ts +119 -0
- package/functions/commerce/waitlist/products.ts +123 -0
- package/functions/commerce/waitlist/restaurants.ts +123 -0
- package/functions/craft.ts +107 -0
- package/functions/dashboard.ts +153 -0
- package/functions/inbox.ts +95 -0
- package/functions/jobs.ts +86 -0
- package/functions/monitoring/errors.ts +295 -0
- package/functions/queue.ts +111 -0
- package/functions/realtime/websockets.ts +96 -0
- package/functions/realtime.ts +52 -0
- package/functions/releases.ts +49 -0
- package/functions/search.ts +126 -0
- package/functions/toasts.ts +95 -0
- package/functions/uploads.ts +216 -0
- package/ide/.gitignore +4 -0
- package/ide/cursor/rules/auto-imports.mdc +574 -0
- package/ide/cursor/rules/code-style.mdc +12 -0
- package/ide/cursor/rules/documentation.mdc +9 -0
- package/ide/cursor/rules/error-handling-validation.mdc +11 -0
- package/ide/cursor/rules/key-conventions.mdc +11 -0
- package/ide/cursor/rules/project-structure.mdc +169 -0
- package/ide/cursor/rules/readme.mdc +318 -0
- package/ide/cursor/rules/syntax-formatting.mdc +9 -0
- package/ide/cursor/rules/testing.mdc +10 -0
- package/ide/cursor/rules/typescript.mdc +9 -0
- package/ide/cursor/rules/ui-styling.mdc +0 -0
- package/ide/dictionary.txt +397 -0
- package/ide/jetbrains/.fleet/settings.json +4 -0
- package/ide/jetbrains/.idea/.gitignore +5 -0
- package/ide/jetbrains/.idea/.name +1 -0
- package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
- package/ide/jetbrains/.idea/modules.xml +8 -0
- package/ide/jetbrains/.idea/stacks.iml +22 -0
- package/ide/jetbrains/.idea/vcs.xml +6 -0
- package/ide/jetbrains/.idea/webResources.xml +14 -0
- package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
- package/ide/jetbrains/installed.txt +4 -0
- package/ide/jetbrains/options/github-copilot.xml +5 -0
- package/ide/jetbrains/options/nodejs.xml +7 -0
- package/ide/jetbrains/options/templates.xml +124 -0
- package/ide/jetbrains/templates/JavaScript.xml +6 -0
- package/ide/jetbrains/templates/Stacks.xml +8 -0
- package/ide/vscode/.vscode/README.md +23 -0
- package/ide/vscode/.vscode/extensions.json +5 -0
- package/ide/vscode/.vscode/settings.json +176 -0
- package/ide/vscode/.vscode/stacks.code-snippets +181 -0
- package/ide/vscode/LICENSE.md +21 -0
- package/ide/vscode/README.md +36 -0
- package/ide/vscode/logo.png +0 -0
- package/ide/vscode/package.json +79 -0
- package/ide/zed/.zed/settings.json +139 -0
- package/lang/README.md +28 -0
- package/lang/de.yml +14 -0
- package/lang/en.yml +15 -0
- package/package.json +19 -3
- package/project/bootstrap +161 -0
- package/project/buddy +175 -0
- package/project/storage/framework/tsconfig.app.json +50 -0
- package/project/storage/framework/tsconfig.base.json +58 -0
- package/routes/core.ts +78 -0
- package/routes/dashboard-api.ts +233 -0
- package/routes/dashboard.ts +739 -0
- package/routes/email.ts +129 -0
- package/stores/[name].stx +16 -0
- package/stores/git.ts +71 -0
- package/stores/payment.ts +474 -0
- package/stores/queue.ts +43 -0
- package/stores/user.ts +29 -0
- package/stx-components-plugin.ts +25 -0
- package/styles/design-tokens.css +597 -0
- package/types/dashboard.ts +70 -0
- package/types/defaults.ts +438 -0
- package/vcs/github/CODE_OF_CONDUCT.md +83 -0
- package/vcs/github/CONTRIBUTING.md +187 -0
- package/vcs/github/EXPLANATIONS.md +41 -0
- package/vcs/github/FUNDING.yml +1 -0
- package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
- package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
- package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
- package/vcs/github/SECURITY.md +70 -0
- package/vcs/github/renovate.json +5 -0
- package/vcs/github/stale.yml +14 -0
- package/vcs/github/workflows/README.md +16 -0
- package/vcs/github/workflows/ci.yml +114 -0
- package/vcs/github/workflows/export-size.yml +25 -0
- package/vcs/github/workflows/labeler.yml +13 -0
- package/vcs/github/workflows/release.yml +219 -0
- package/views/[...all].stx +8 -0
- package/views/about.md +3 -0
- package/views/auth/login.stx +1 -0
- package/views/auth/signup.stx +85 -0
- package/views/dashboard/.discovered-models.json +542 -0
- package/views/dashboard/AUDIT.md +904 -0
- package/views/dashboard/[...all].stx +89 -0
- package/views/dashboard/access-tokens/index.stx +177 -0
- package/views/dashboard/actions/index.stx +129 -0
- package/views/dashboard/analytics/blog/index.stx +356 -0
- package/views/dashboard/analytics/browsers/index.stx +263 -0
- package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
- package/views/dashboard/analytics/commerce/web/index.stx +379 -0
- package/views/dashboard/analytics/countries/index.stx +289 -0
- package/views/dashboard/analytics/devices/index.stx +305 -0
- package/views/dashboard/analytics/events/index.stx +536 -0
- package/views/dashboard/analytics/index.stx +88 -0
- package/views/dashboard/analytics/marketing/index.stx +315 -0
- package/views/dashboard/analytics/pages/index.stx +271 -0
- package/views/dashboard/analytics/referrers/index.stx +319 -0
- package/views/dashboard/analytics/web/index.stx +356 -0
- package/views/dashboard/buddy/index.stx +198 -0
- package/views/dashboard/ci/index.stx +462 -0
- package/views/dashboard/cloud/index.stx +452 -0
- package/views/dashboard/commands/index.stx +295 -0
- package/views/dashboard/commerce/categories/index.stx +406 -0
- package/views/dashboard/commerce/coupons/index.stx +485 -0
- package/views/dashboard/commerce/customers/index.stx +410 -0
- package/views/dashboard/commerce/dashboard/index.stx +287 -0
- package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
- package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
- package/views/dashboard/commerce/delivery/drivers.stx +397 -0
- package/views/dashboard/commerce/delivery/index.stx +18 -0
- package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
- package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
- package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
- package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
- package/views/dashboard/commerce/delivery/tabs.ts +25 -0
- package/views/dashboard/commerce/gift-cards/index.stx +561 -0
- package/views/dashboard/commerce/manufacturers/index.stx +308 -0
- package/views/dashboard/commerce/orders/index.stx +247 -0
- package/views/dashboard/commerce/payments/index.stx +535 -0
- package/views/dashboard/commerce/pos/index.stx +653 -0
- package/views/dashboard/commerce/printers/devices/index.stx +273 -0
- package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
- package/views/dashboard/commerce/products/detail.stx +563 -0
- package/views/dashboard/commerce/products/index.stx +370 -0
- package/views/dashboard/commerce/reviews/index.stx +656 -0
- package/views/dashboard/commerce/reviews/index.ts +0 -0
- package/views/dashboard/commerce/taxes/index.stx +377 -0
- package/views/dashboard/commerce/units/index.stx +317 -0
- package/views/dashboard/commerce/variants/index.stx +319 -0
- package/views/dashboard/commerce/waitlist/products.stx +942 -0
- package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
- package/views/dashboard/components/index.stx +330 -0
- package/views/dashboard/composables/index.ts +19 -0
- package/views/dashboard/composables/useChart.ts +77 -0
- package/views/dashboard/composables/useNavigation.ts +99 -0
- package/views/dashboard/composables/useRole.ts +58 -0
- package/views/dashboard/composables/useTheme.ts +74 -0
- package/views/dashboard/content/authors/index.stx +171 -0
- package/views/dashboard/content/blog/index.stx +493 -0
- package/views/dashboard/content/categories/index.stx +169 -0
- package/views/dashboard/content/comments/index.stx +189 -0
- package/views/dashboard/content/dashboard.stx +383 -0
- package/views/dashboard/content/files/index.stx +706 -0
- package/views/dashboard/content/pages/index.stx +174 -0
- package/views/dashboard/content/posts/index.stx +269 -0
- package/views/dashboard/content/seo/index.stx +240 -0
- package/views/dashboard/content/tags/index.stx +167 -0
- package/views/dashboard/data/activity/index.stx +261 -0
- package/views/dashboard/data/dashboard/index.stx +116 -0
- package/views/dashboard/data/subscribers.stx +270 -0
- package/views/dashboard/data/teams.stx +275 -0
- package/views/dashboard/data/users.stx +279 -0
- package/views/dashboard/dependencies/index.stx +178 -0
- package/views/dashboard/deployments/[id].stx +234 -0
- package/views/dashboard/deployments/index.stx +9 -0
- package/views/dashboard/dns/index.stx +163 -0
- package/views/dashboard/environment/index.stx +283 -0
- package/views/dashboard/errors/index.stx +274 -0
- package/views/dashboard/forgot-password.stx +57 -0
- package/views/dashboard/functions/index.stx +159 -0
- package/views/dashboard/health/index.stx +248 -0
- package/views/dashboard/inbox/activity.stx +350 -0
- package/views/dashboard/inbox/index.stx +452 -0
- package/views/dashboard/inbox/settings.stx +290 -0
- package/views/dashboard/index.stx +252 -0
- package/views/dashboard/insights/index.stx +529 -0
- package/views/dashboard/jobs/[id].stx +430 -0
- package/views/dashboard/jobs/history.stx +222 -0
- package/views/dashboard/jobs/index.stx +214 -0
- package/views/dashboard/kanban/[id].stx +899 -0
- package/views/dashboard/kanban/index.stx +260 -0
- package/views/dashboard/layouts/default.stx +565 -0
- package/views/dashboard/layouts/guest.stx +10 -0
- package/views/dashboard/login.stx +48 -0
- package/views/dashboard/logs/index.stx +540 -0
- package/views/dashboard/mailboxes/index.stx +149 -0
- package/views/dashboard/management/permissions/index.stx +490 -0
- package/views/dashboard/marketing/campaigns/index.stx +604 -0
- package/views/dashboard/marketing/lists/index.stx +514 -0
- package/views/dashboard/marketing/reviews/index.stx +475 -0
- package/views/dashboard/marketing/social-posts/index.stx +560 -0
- package/views/dashboard/models/[model].stx +195 -0
- package/views/dashboard/models/index.stx +159 -0
- package/views/dashboard/monitoring/errors/index.stx +415 -0
- package/views/dashboard/notifications/dashboard.stx +383 -0
- package/views/dashboard/notifications/email.stx +336 -0
- package/views/dashboard/notifications/history.stx +373 -0
- package/views/dashboard/notifications/sms.stx +332 -0
- package/views/dashboard/packages/index.stx +195 -0
- package/views/dashboard/queries/[id].stx +381 -0
- package/views/dashboard/queries/history.stx +227 -0
- package/views/dashboard/queries/index.stx +335 -0
- package/views/dashboard/queries/slow.stx +318 -0
- package/views/dashboard/queue/index.stx +427 -0
- package/views/dashboard/realtime/index.stx +429 -0
- package/views/dashboard/register.stx +46 -0
- package/views/dashboard/releases/index.stx +389 -0
- package/views/dashboard/requests/index.stx +462 -0
- package/views/dashboard/serverless/index.stx +475 -0
- package/views/dashboard/servers/[id].stx +299 -0
- package/views/dashboard/servers/index.stx +483 -0
- package/views/dashboard/settings/billing.stx +50 -0
- package/views/dashboard/settings/index.stx +256 -0
- package/views/dashboard/settings/mail.stx +252 -0
- package/views/dashboard/stores/auth.ts +123 -0
- package/views/dashboard/stores/ci.ts +342 -0
- package/views/dashboard/stores/index.ts +129 -0
- package/views/dashboard/stores/kanban.ts +723 -0
- package/views/dashboard/stores/rbac.ts +350 -0
- package/views/dashboard/stx.config.ts +34 -0
- package/views/dashboard/teams/[id].stx +170 -0
- package/views/forum/category.stx +92 -0
- package/views/forum/index.stx +209 -0
- package/views/forum/new-topic.stx +113 -0
- package/views/forum/profile.stx +1 -0
- package/views/forum/topic.stx +143 -0
- package/views/hello-world/[name].stx +47 -0
- package/views/index.stx +21 -0
- package/views/system-tray/index.stx +147 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { Units } from '../../../types/defaults'
|
|
2
|
+
import { useStorage } from '@stacksjs/browser'
|
|
3
|
+
import { pushToast } from '../../toasts'
|
|
4
|
+
|
|
5
|
+
// Create a persistent units array using STX useStorage
|
|
6
|
+
const units = useStorage<Units[]>('units', [])
|
|
7
|
+
|
|
8
|
+
const baseURL = process.env.VITE_API_URL || `http://localhost:${process.env.PORT_API || '3008'}`
|
|
9
|
+
|
|
10
|
+
// Basic fetch function to get all units
|
|
11
|
+
async function fetchUnits(): Promise<Units[]> {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${baseURL}/commerce/products/units`)
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
16
|
+
}
|
|
17
|
+
const data = await response.json() as Units[]
|
|
18
|
+
|
|
19
|
+
if (Array.isArray(data)) {
|
|
20
|
+
units.value = data
|
|
21
|
+
return data
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pushToast('error', 'Couldn\'t load units', { detail: 'Server returned a non-array response' })
|
|
25
|
+
return []
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
pushToast('error', 'Error fetching units', { detail: String(error) })
|
|
30
|
+
return []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function createUnit(unit: Units): Promise<Units | null> {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${baseURL}/commerce/products/units`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify(unit),
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const data = await response.json() as Units
|
|
49
|
+
if (data) {
|
|
50
|
+
units.value.push(data)
|
|
51
|
+
return data
|
|
52
|
+
}
|
|
53
|
+
return null
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
pushToast('error', 'Error creating unit', { detail: String(error) })
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function updateUnit(unit: Units): Promise<Units | null> {
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(`${baseURL}/commerce/products/units/${unit.id}`, {
|
|
64
|
+
method: 'PATCH',
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify(unit),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const data = await response.json() as Units
|
|
76
|
+
if (data) {
|
|
77
|
+
const index = units.value.findIndex(u => u.id === unit.id)
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
units.value[index] = data
|
|
80
|
+
}
|
|
81
|
+
return data
|
|
82
|
+
}
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
pushToast('error', 'Error updating unit', { detail: String(error) })
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function deleteUnit(id: number): Promise<boolean> {
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(`${baseURL}/commerce/products/units/${id}`, {
|
|
94
|
+
method: 'DELETE',
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const index = units.value.findIndex(u => u.id === id)
|
|
102
|
+
if (index !== -1) {
|
|
103
|
+
units.value.splice(index, 1)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
pushToast('error', 'Error deleting unit', { detail: String(error) })
|
|
110
|
+
return false
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Export the composable
|
|
115
|
+
export function useUnits() {
|
|
116
|
+
return {
|
|
117
|
+
units,
|
|
118
|
+
fetchUnits,
|
|
119
|
+
createUnit,
|
|
120
|
+
updateUnit,
|
|
121
|
+
deleteUnit,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { ProductVariants } from '../../../types/defaults'
|
|
2
|
+
import { useStorage } from '@stacksjs/browser'
|
|
3
|
+
import { pushToast } from '../../toasts'
|
|
4
|
+
|
|
5
|
+
// Create a persistent variants array using STX useStorage
|
|
6
|
+
const variants = useStorage<ProductVariants[]>('variants', [])
|
|
7
|
+
|
|
8
|
+
const baseURL = process.env.VITE_API_URL || `http://localhost:${process.env.PORT_API || '3008'}`
|
|
9
|
+
|
|
10
|
+
// Basic fetch function to get all variants
|
|
11
|
+
async function fetchVariants() {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${baseURL}/commerce/products/variants`)
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
16
|
+
}
|
|
17
|
+
const data = await response.json() as ProductVariants[]
|
|
18
|
+
|
|
19
|
+
if (Array.isArray(data)) {
|
|
20
|
+
variants.value = data
|
|
21
|
+
return data
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pushToast('error', 'Couldn\'t load variants', { detail: 'Server returned a non-array response' })
|
|
25
|
+
return []
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
pushToast('error', 'Error fetching variants', { detail: String(error) })
|
|
30
|
+
return []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function createVariant(variant: ProductVariants) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${baseURL}/commerce/products/variants`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify(variant),
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const data = await response.json() as ProductVariants
|
|
49
|
+
if (data) {
|
|
50
|
+
variants.value.push(data)
|
|
51
|
+
return data
|
|
52
|
+
}
|
|
53
|
+
return null
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
pushToast('error', 'Error creating variant', { detail: String(error) })
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function updateVariant(variant: ProductVariants) {
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(`${baseURL}/commerce/products/variants/${variant.id}`, {
|
|
64
|
+
method: 'PATCH',
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify(variant),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const data = await response.json() as ProductVariants
|
|
76
|
+
if (data) {
|
|
77
|
+
const index = variants.value.findIndex(v => v.id === variant.id)
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
variants.value[index] = data
|
|
80
|
+
}
|
|
81
|
+
return data
|
|
82
|
+
}
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
pushToast('error', 'Error updating variant', { detail: String(error) })
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function deleteVariant(id: number) {
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(`${baseURL}/commerce/products/variants/${id}`, {
|
|
94
|
+
method: 'DELETE',
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const index = variants.value.findIndex(v => v.id === id)
|
|
102
|
+
if (index !== -1) {
|
|
103
|
+
variants.value.splice(index, 1)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
pushToast('error', 'Error deleting variant', { detail: String(error) })
|
|
110
|
+
return false
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Export the composable
|
|
115
|
+
export function useVariants() {
|
|
116
|
+
return {
|
|
117
|
+
variants,
|
|
118
|
+
fetchVariants,
|
|
119
|
+
createVariant,
|
|
120
|
+
updateVariant,
|
|
121
|
+
deleteVariant,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { DeliveryRoutes, NewDeliveryRoute } from '../../../types/defaults'
|
|
2
|
+
import { useStorage } from '@stacksjs/browser'
|
|
3
|
+
import { pushToast } from '../../toasts'
|
|
4
|
+
|
|
5
|
+
// Create a persistent delivery routes array using STX useStorage
|
|
6
|
+
const deliveryRoutes = useStorage<DeliveryRoutes[]>('deliveryRoutes', [])
|
|
7
|
+
|
|
8
|
+
const baseURL = process.env.VITE_API_URL || `http://localhost:${process.env.PORT_API || '3008'}`
|
|
9
|
+
|
|
10
|
+
// Basic fetch function to get all delivery routes
|
|
11
|
+
async function fetchDeliveryRoutes() {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${baseURL}/commerce/delivery-routes`)
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
16
|
+
}
|
|
17
|
+
const { data } = await response.json() as { data: DeliveryRoutes[] }
|
|
18
|
+
|
|
19
|
+
if (Array.isArray(data)) {
|
|
20
|
+
deliveryRoutes.value = data
|
|
21
|
+
return data
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pushToast('error', 'Couldn\'t load delivery routes', { detail: 'Server returned a non-array response' })
|
|
25
|
+
return []
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
pushToast('error', 'Error fetching delivery routes', { detail: String(error) })
|
|
30
|
+
return []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function createDeliveryRoute(deliveryRoute: NewDeliveryRoute) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${baseURL}/commerce/delivery-routes`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify(deliveryRoute),
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const { data } = await response.json() as { data: DeliveryRoutes }
|
|
49
|
+
if (data) {
|
|
50
|
+
deliveryRoutes.value.push(data)
|
|
51
|
+
return data
|
|
52
|
+
}
|
|
53
|
+
return null
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
pushToast('error', 'Error creating delivery route', { detail: String(error) })
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function updateDeliveryRoute(deliveryRoute: DeliveryRoutes) {
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(`${baseURL}/commerce/delivery-routes/${deliveryRoute.id}`, {
|
|
64
|
+
method: 'PATCH',
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify(deliveryRoute),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const { data } = await response.json() as { data: DeliveryRoutes }
|
|
76
|
+
if (data) {
|
|
77
|
+
const index = deliveryRoutes.value.findIndex(s => s.id === deliveryRoute.id)
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
deliveryRoutes.value[index] = data
|
|
80
|
+
}
|
|
81
|
+
return data
|
|
82
|
+
}
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
pushToast('error', 'Error updating delivery route', { detail: String(error) })
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function deleteDeliveryRoute(id: number) {
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(`${baseURL}/commerce/delivery-routes/${id}`, {
|
|
94
|
+
method: 'DELETE',
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const index = deliveryRoutes.value.findIndex(s => s.id === id)
|
|
102
|
+
if (index !== -1) {
|
|
103
|
+
deliveryRoutes.value.splice(index, 1)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
pushToast('error', 'Error deleting delivery route', { detail: String(error) })
|
|
110
|
+
return false
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Export the composable
|
|
115
|
+
export function useDeliveryRoutes() {
|
|
116
|
+
return {
|
|
117
|
+
deliveryRoutes,
|
|
118
|
+
fetchDeliveryRoutes,
|
|
119
|
+
createDeliveryRoute,
|
|
120
|
+
updateDeliveryRoute,
|
|
121
|
+
deleteDeliveryRoute,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { DigitalDeliveries } from '../../../types/defaults'
|
|
2
|
+
import { useStorage } from '@stacksjs/browser'
|
|
3
|
+
import { pushToast } from '../../toasts'
|
|
4
|
+
|
|
5
|
+
// Create a persistent digital deliveries array using STX useStorage
|
|
6
|
+
const digitalDeliveries = useStorage<DigitalDeliveries[]>('digitalDeliveries', [])
|
|
7
|
+
|
|
8
|
+
const baseURL = process.env.VITE_API_URL || `http://localhost:${process.env.PORT_API || '3008'}`
|
|
9
|
+
|
|
10
|
+
// Basic fetch function to get all digital deliveries
|
|
11
|
+
async function fetchDigitalDeliveries() {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${baseURL}/commerce/digital-deliveries`)
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const { data } = await response.json() as { data: DigitalDeliveries[] }
|
|
19
|
+
|
|
20
|
+
digitalDeliveries.value = data
|
|
21
|
+
|
|
22
|
+
return data
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
pushToast('error', 'Error fetching digital deliveries', { detail: String(error) })
|
|
26
|
+
return []
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function createDigitalDelivery(digitalDelivery: Omit<DigitalDeliveries, 'id'>) {
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(`${baseURL}/commerce/digital-deliveries`, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify(digitalDelivery),
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const data = await response.json() as DigitalDeliveries
|
|
45
|
+
if (data) {
|
|
46
|
+
digitalDeliveries.value.push(data)
|
|
47
|
+
return data
|
|
48
|
+
}
|
|
49
|
+
return null
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
pushToast('error', 'Error creating digital delivery', { detail: String(error) })
|
|
53
|
+
return null
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function updateDigitalDelivery(digitalDelivery: DigitalDeliveries) {
|
|
58
|
+
try {
|
|
59
|
+
const response = await fetch(`${baseURL}/commerce/digital-deliveries/${digitalDelivery.id}`, {
|
|
60
|
+
method: 'PATCH',
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
},
|
|
64
|
+
body: JSON.stringify(digitalDelivery),
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const data = await response.json() as DigitalDeliveries
|
|
72
|
+
if (data) {
|
|
73
|
+
const index = digitalDeliveries.value.findIndex(d => d.id === digitalDelivery.id)
|
|
74
|
+
if (index !== -1) {
|
|
75
|
+
digitalDeliveries.value[index] = data
|
|
76
|
+
}
|
|
77
|
+
return data
|
|
78
|
+
}
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
pushToast('error', 'Error updating digital delivery', { detail: String(error) })
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async function deleteDigitalDelivery(id: number) {
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(`${baseURL}/commerce/digital-deliveries/${id}`, {
|
|
90
|
+
method: 'DELETE',
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const index = digitalDeliveries.value.findIndex(d => d.id === id)
|
|
98
|
+
if (index !== -1) {
|
|
99
|
+
digitalDeliveries.value.splice(index, 1)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return true
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
pushToast('error', 'Error deleting digital delivery', { detail: String(error) })
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Export the composable
|
|
111
|
+
export function useDigitalDeliveries() {
|
|
112
|
+
return {
|
|
113
|
+
digitalDeliveries,
|
|
114
|
+
fetchDigitalDeliveries,
|
|
115
|
+
createDigitalDelivery,
|
|
116
|
+
updateDigitalDelivery,
|
|
117
|
+
deleteDigitalDelivery,
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { Drivers, NewDriver } from '../../../types/defaults'
|
|
2
|
+
import { useStorage } from '@stacksjs/browser'
|
|
3
|
+
import { pushToast } from '../../toasts'
|
|
4
|
+
|
|
5
|
+
// Create a persistent drivers array using STX useStorage
|
|
6
|
+
const drivers = useStorage<Drivers[]>('drivers', [])
|
|
7
|
+
|
|
8
|
+
const baseURL = process.env.VITE_API_URL || `http://localhost:${process.env.PORT_API || '3008'}`
|
|
9
|
+
|
|
10
|
+
// Basic fetch function to get all drivers
|
|
11
|
+
async function fetchDrivers() {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${baseURL}/commerce/drivers`)
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
16
|
+
}
|
|
17
|
+
const { data } = await response.json() as { data: Drivers[] }
|
|
18
|
+
|
|
19
|
+
if (Array.isArray(data)) {
|
|
20
|
+
drivers.value = data
|
|
21
|
+
return data
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pushToast('error', 'Couldn\'t load drivers', { detail: 'Server returned a non-array response' })
|
|
25
|
+
return []
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
pushToast('error', 'Error fetching drivers', { detail: String(error) })
|
|
30
|
+
return []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function createDriver(driver: NewDriver) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${baseURL}/commerce/drivers`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify(driver),
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const { data } = await response.json() as { data: Drivers }
|
|
49
|
+
if (data) {
|
|
50
|
+
drivers.value.push(data)
|
|
51
|
+
return data
|
|
52
|
+
}
|
|
53
|
+
return null
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
pushToast('error', 'Error creating driver', { detail: String(error) })
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function updateDriver(driver: Drivers) {
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(`${baseURL}/commerce/drivers/${driver.id}`, {
|
|
64
|
+
method: 'PATCH',
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify(driver),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const { data } = await response.json() as { data: Drivers }
|
|
76
|
+
if (data) {
|
|
77
|
+
const index = drivers.value.findIndex(s => s.id === driver.id)
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
drivers.value[index] = data
|
|
80
|
+
}
|
|
81
|
+
return data
|
|
82
|
+
}
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
pushToast('error', 'Error updating driver', { detail: String(error) })
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function deleteDriver(id: number) {
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(`${baseURL}/commerce/drivers/${id}`, {
|
|
94
|
+
method: 'DELETE',
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const index = drivers.value.findIndex(s => s.id === id)
|
|
102
|
+
if (index !== -1) {
|
|
103
|
+
drivers.value.splice(index, 1)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
pushToast('error', 'Error deleting driver', { detail: String(error) })
|
|
110
|
+
return false
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Export the composable
|
|
115
|
+
export function useDrivers() {
|
|
116
|
+
return {
|
|
117
|
+
drivers,
|
|
118
|
+
fetchDrivers,
|
|
119
|
+
createDriver,
|
|
120
|
+
updateDriver,
|
|
121
|
+
deleteDriver,
|
|
122
|
+
}
|
|
123
|
+
}
|