docs: added edit date (#8623)
This commit is contained in:
@@ -8,4 +8,7 @@ module.exports = {
|
|||||||
rootDir: ".",
|
rootDir: ".",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ignorePatterns: [
|
||||||
|
"generated"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
export const generatedEditDates = {
|
||||||
|
"app/basics/scheduled-jobs/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/basics/workflows/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/deployment/page.mdx": "2024-08-05T07:24:05+00:00",
|
||||||
|
"app/page.mdx": "2024-07-24T14:16:33+00:00",
|
||||||
|
"app/basics/modules-and-services/page.mdx": "2024-07-15T16:00:54+00:00",
|
||||||
|
"app/basics/commerce-modules/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/advanced-development/workflows/retry-failed-steps/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/workflows/workflow-hooks/page.mdx": "2024-08-13T09:55:37+03:00",
|
||||||
|
"app/cheatsheet/page.mdx": "2024-07-11T13:53:40+03:00",
|
||||||
|
"app/debugging-and-testing/logging/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/debugging-and-testing/tools/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/more-resources/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/storefront-development/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/storefront-development/nextjs-starter/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/admin-customizations/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/workflows/workflow-timeout/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/workflows/parallel-steps/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/first-customizations/page.mdx": "2024-05-07T18:00:28+02:00",
|
||||||
|
"app/debugging-and-testing/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/basics/medusa-container/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/architectural-modules/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/project-directories-files/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/api-routes/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/modules-directory-structure/page.mdx": "2024-05-07T18:00:28+02:00",
|
||||||
|
"app/advanced-development/workflows/access-workflow-errors/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/basics/events-and-subscribers/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/advanced-development/modules/container/page.mdx": "2024-08-05T07:23:49+00:00",
|
||||||
|
"app/basics/data-models/page.mdx": "2024-07-15T17:46:10+02:00",
|
||||||
|
"app/advanced-development/workflows/execute-another-workflow/page.mdx": "2024-07-21T21:19:23+02:00",
|
||||||
|
"app/basics/loaders/page.mdx": "2024-08-05T07:23:49+00:00",
|
||||||
|
"app/advanced-development/admin/widgets/page.mdx": "2024-08-06T09:44:22+02:00",
|
||||||
|
"app/advanced-development/data-models/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/modules/remote-link/page.mdx": "2024-07-24T09:16:01+02:00",
|
||||||
|
"app/advanced-development/api-routes/protected-routes/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/workflows/add-workflow-hook/page.mdx": "2024-08-13T09:55:37+03:00",
|
||||||
|
"app/advanced-development/events-and-subscribers/data-payload/page.mdx": "2024-07-16T17:12:05+01:00",
|
||||||
|
"app/advanced-development/data-models/default-properties/page.mdx": "2024-07-02T12:34:44+03:00",
|
||||||
|
"app/advanced-development/workflows/advanced-example/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/events-and-subscribers/emit-event/page.mdx": "2024-08-05T11:39:47+03:00",
|
||||||
|
"app/advanced-development/workflows/conditions/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/modules/module-link-directions/page.mdx": "2024-07-24T09:16:01+02:00",
|
||||||
|
"app/advanced-development/admin/page.mdx": "2024-05-29T13:50:19+03:00",
|
||||||
|
"app/advanced-development/workflows/long-running-workflow/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/workflows/constructor-constraints/page.mdx": "2024-07-17T13:19:51+01:00",
|
||||||
|
"app/advanced-development/data-models/write-migration/page.mdx": "2024-07-15T17:46:10+02:00",
|
||||||
|
"app/advanced-development/data-models/manage-relationships/page.mdx": "2024-08-15T16:30:00+03:00",
|
||||||
|
"app/advanced-development/modules/remote-query/page.mdx": "2024-07-21T21:20:24+02:00",
|
||||||
|
"app/advanced-development/modules/options/page.mdx": "2024-08-05T07:23:49+00:00",
|
||||||
|
"app/advanced-development/data-models/relationships/page.mdx": "2024-08-15T16:30:00+03:00",
|
||||||
|
"app/advanced-development/workflows/compensation-function/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/advanced-development/modules/service-factory/page.mdx": "2024-07-26T14:40:56+00:00",
|
||||||
|
"app/advanced-development/data-models/primary-key/page.mdx": "2024-07-02T12:34:44+03:00",
|
||||||
|
"app/advanced-development/modules/module-links/page.mdx": "2024-07-24T09:16:01+02:00",
|
||||||
|
"app/advanced-development/data-models/searchable-property/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/scheduled-jobs/execution-number/page.mdx": "2024-07-02T09:41:15+00:00",
|
||||||
|
"app/advanced-development/api-routes/parameters/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/api-routes/http-methods/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/admin/tips/page.mdx": "2024-08-05T13:20:34+03:00",
|
||||||
|
"app/advanced-development/api-routes/cors/page.mdx": "2024-07-25T17:14:06+02:00",
|
||||||
|
"app/advanced-development/admin/ui-routes/page.mdx": "2024-08-06T09:44:22+02:00",
|
||||||
|
"app/advanced-development/api-routes/middlewares/page.mdx": "2024-07-25T17:14:06+02:00",
|
||||||
|
"app/advanced-development/modules/isolation/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/data-models/configure-properties/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/data-models/index/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/custom-cli-scripts/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/advanced-development/data-models/property-types/page.mdx": "2024-07-04T17:26:03+03:00"
|
||||||
|
}
|
||||||
@@ -10,7 +10,8 @@
|
|||||||
"start": "next start",
|
"start": "next start",
|
||||||
"start:monorepo": "yarn start -p 3001",
|
"start:monorepo": "yarn start -p 3001",
|
||||||
"lint": "next lint --fix",
|
"lint": "next lint --fix",
|
||||||
"lint:content": "eslint --no-eslintrc -c .content.eslintrc.js app/**/*.mdx --fix"
|
"lint:content": "eslint --no-eslintrc -c .content.eslintrc.js app/**/*.mdx --fix",
|
||||||
|
"prep": "node ./scripts/prepare.mjs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdx-js/loader": "^3.0.0",
|
"@mdx-js/loader": "^3.0.0",
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
"@types/react": "^18.2.0",
|
"@types/react": "^18.2.0",
|
||||||
"@types/react-dom": "^18.2.0",
|
"@types/react-dom": "^18.2.0",
|
||||||
"autoprefixer": "^10.0.1",
|
"autoprefixer": "^10.0.1",
|
||||||
|
"build-scripts": "*",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-docs": "*",
|
"eslint-config-docs": "*",
|
||||||
"eslint-config-next": "14.2.3",
|
"eslint-config-next": "14.2.3",
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import {
|
|||||||
import { useMemo } from "react"
|
import { useMemo } from "react"
|
||||||
import { config } from "../config"
|
import { config } from "../config"
|
||||||
import { basePathUrl } from "../utils/base-path-url"
|
import { basePathUrl } from "../utils/base-path-url"
|
||||||
|
import { usePathname } from "next/navigation"
|
||||||
|
import { generatedEditDates } from "../generated/edit-dates.mjs"
|
||||||
|
|
||||||
type MainNavProviderProps = {
|
type MainNavProviderProps = {
|
||||||
children?: React.ReactNode
|
children?: React.ReactNode
|
||||||
@@ -16,6 +18,7 @@ type MainNavProviderProps = {
|
|||||||
|
|
||||||
export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
||||||
const isBrowser = useIsBrowser()
|
const isBrowser = useIsBrowser()
|
||||||
|
const pathname = usePathname()
|
||||||
const navigationDropdownItems = useMemo(
|
const navigationDropdownItems = useMemo(
|
||||||
() =>
|
() =>
|
||||||
getNavDropdownItems({
|
getNavDropdownItems({
|
||||||
@@ -35,10 +38,19 @@ export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
|||||||
[isBrowser]
|
[isBrowser]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const editDate = useMemo(
|
||||||
|
() =>
|
||||||
|
(generatedEditDates as Record<string, string>)[
|
||||||
|
`app${pathname.replace(/\/$/, "")}/page.mdx`
|
||||||
|
],
|
||||||
|
[pathname]
|
||||||
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UiMainNavProvider
|
<UiMainNavProvider
|
||||||
navItems={navigationDropdownItems}
|
navItems={navigationDropdownItems}
|
||||||
reportIssueLink={reportLink}
|
reportIssueLink={reportLink}
|
||||||
|
editDate={editDate}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</UiMainNavProvider>
|
</UiMainNavProvider>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import { generateEditedDates } from "build-scripts"
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
await generateEditedDates()
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
@@ -0,0 +1,258 @@
|
|||||||
|
export const generatedEditDates = {
|
||||||
|
"app/commerce-modules/auth/auth-providers/emailpass/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/auth/auth-providers/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/commerce-modules/auth/authentication-route/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/commerce-modules/auth/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/auth/module-options/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/auth/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/cart/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/cart/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/cart/concepts/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/cart/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/cart/promotions/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/cart/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/cart/tax-lines/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/cart/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/currency/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/currency/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/currency/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/currency/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/currency/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/customer/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/customer/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/customer/customer-accounts/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/customer/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/customer/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/customer/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/fulfillment/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/fulfillment/concepts/page.mdx": "2024-06-19T13:02:16+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/fulfillment-provider/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/commerce-modules/fulfillment/item-fulfillment/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/module-options/page.mdx": "2024-07-22T07:17:15+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/shipping-option/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/fulfillment/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/inventory/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/inventory/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/inventory/concepts/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/inventory/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/inventory/inventory-in-flows/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/inventory/relations-to-other-modules/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/inventory/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/order/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/order/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/order/claim/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/concepts/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/exchange/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/order-versioning/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/promotion-adjustments/page.mdx": "2024-07-15T17:46:10+02:00",
|
||||||
|
"app/commerce-modules/order/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/order/return/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/tax-lines/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/transactions/page.mdx": "2024-07-09T18:14:30+03:00",
|
||||||
|
"app/commerce-modules/order/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/payment/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/payment/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/payment/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/payment/module-options/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/payment/payment/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/payment/payment-collection/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/payment/payment-flow/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/payment/payment-provider/stripe/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/commerce-modules/payment/payment-provider/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/commerce-modules/payment/payment-session/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/payment/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/payment/webhook-events/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/payment/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/pricing/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/pricing/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/pricing/concepts/page.mdx": "2024-07-01T16:34:13+00:00",
|
||||||
|
"app/commerce-modules/pricing/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/pricing/price-calculation/page.mdx": "2024-07-26T10:09:41+03:00",
|
||||||
|
"app/commerce-modules/pricing/price-rules/page.mdx": "2024-07-01T16:34:13+00:00",
|
||||||
|
"app/commerce-modules/pricing/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/pricing/tax-inclusive-pricing/page.mdx": "2024-07-18T19:03:37+02:00",
|
||||||
|
"app/commerce-modules/pricing/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/product/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/product/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/product/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/product/guides/price/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/commerce-modules/product/guides/price-with-taxes/page.mdx": "2024-08-01T15:32:54+00:00",
|
||||||
|
"app/commerce-modules/product/relations-to-other-modules/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/product/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/promotion/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/promotion/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/promotion/actions/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/promotion/application-method/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/promotion/campaign/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/promotion/concepts/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/promotion/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/promotion/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/promotion/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/region/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/region/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/region/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/region/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/region/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/sales-channel/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/sales-channel/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/sales-channel/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/sales-channel/publishable-api-keys/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/sales-channel/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/sales-channel/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/stock-location/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/stock-location/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/stock-location/concepts/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/commerce-modules/stock-location/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/stock-location/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/stock-location/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/store/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/store/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/store/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/store/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/store/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/tax/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/tax/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/tax/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/tax/module-options/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/tax/tax-calculation-with-provider/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/commerce-modules/tax/tax-rates-and-rules/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/tax/tax-region/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/commerce-modules/tax/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/user/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/user/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/user/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/user/module-options/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/user/user-creation-flows/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/user/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/contribution-guidelines/_admin-translations/page.mdx": "2024-05-13T18:55:11+03:00",
|
||||||
|
"app/contribution-guidelines/docs/page.mdx": "2024-05-13T18:55:11+03:00",
|
||||||
|
"app/create-medusa-app/page.mdx": "2024-08-05T11:10:55+03:00",
|
||||||
|
"app/deployment/admin/vercel/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/deployment/medusa-application/railway/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/deployment/storefront/vercel/page.mdx": "2024-07-26T07:21:31+00:00",
|
||||||
|
"app/deployment/page.mdx": "2024-07-25T09:55:22+03:00",
|
||||||
|
"app/integrations/page.mdx": "2024-07-19T08:49:08+00:00",
|
||||||
|
"app/medusa-cli/page.mdx": "2024-08-05T11:10:55+03:00",
|
||||||
|
"app/medusa-container-resources/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/medusa-workflows-reference/page.mdx": "2024-08-15T12:13:13+03:00",
|
||||||
|
"app/nextjs-starter/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/recipes/b2b/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/recipes/commerce-automation/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/recipes/digital-products/examples/standard/page.mdx": "2024-08-16T09:28:31+03:00",
|
||||||
|
"app/recipes/digital-products/page.mdx": "2024-08-02T13:02:06+00:00",
|
||||||
|
"app/recipes/ecommerce/page.mdx": "2024-06-09T15:18:43+02:00",
|
||||||
|
"app/recipes/integrate-ecommerce-stack/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/recipes/marketplace/examples/vendors/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/recipes/marketplace/page.mdx": "2024-07-11T15:56:41+00:00",
|
||||||
|
"app/recipes/multi-region-store/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/recipes/omnichannel/page.mdx": "2024-06-09T15:18:43+02:00",
|
||||||
|
"app/recipes/oms/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/recipes/personalized-products/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/recipes/pos/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/recipes/subscriptions/examples/standard/page.mdx": "2024-08-02T12:40:26+03:00",
|
||||||
|
"app/recipes/subscriptions/page.mdx": "2024-08-02T12:40:26+03:00",
|
||||||
|
"app/recipes/page.mdx": "2024-07-11T15:56:41+00:00",
|
||||||
|
"app/service-factory-reference/methods/create/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/delete/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/list/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/listAndCount/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/restore/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/retrieve/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/soft-delete/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/methods/update/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/tips/filtering/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/service-factory-reference/page.mdx": "2024-07-26T14:40:56+00:00",
|
||||||
|
"app/storefront-development/cart/context/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/cart/create/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/cart/manage-items/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/cart/retrieve/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/cart/update/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/cart/page.mdx": "2024-06-11T11:56:37+03:00",
|
||||||
|
"app/storefront-development/checkout/address/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/checkout/complete-cart/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/checkout/email/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/checkout/payment/stripe/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/storefront-development/checkout/payment/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/checkout/shipping/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/checkout/page.mdx": "2024-06-12T19:46:06+02:00",
|
||||||
|
"app/storefront-development/customers/addresses/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/context/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/log-out/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/login/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/profile/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/register/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/retrieve/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/customers/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/categories/list/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/categories/nested-categories/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/categories/products/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/categories/retrieve/page.mdx": "2024-06-11T19:55:56+02:00",
|
||||||
|
"app/storefront-development/products/categories/page.mdx": "2024-06-11T19:55:56+02:00",
|
||||||
|
"app/storefront-development/products/collections/list/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/collections/products/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/collections/retrieve/page.mdx": "2024-06-11T19:55:56+02:00",
|
||||||
|
"app/storefront-development/products/collections/page.mdx": "2024-06-11T19:55:56+02:00",
|
||||||
|
"app/storefront-development/products/list/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/price/examples/sale-price/page.mdx": "2024-07-30T12:52:21+03:00",
|
||||||
|
"app/storefront-development/products/price/examples/show-price/page.mdx": "2024-07-30T12:52:21+03:00",
|
||||||
|
"app/storefront-development/products/price/examples/tax-price/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/storefront-development/products/price/page.mdx": "2024-07-30T12:52:21+03:00",
|
||||||
|
"app/storefront-development/products/retrieve/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/variants/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/products/page.mdx": "2024-06-11T19:55:56+02:00",
|
||||||
|
"app/storefront-development/regions/context/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/regions/list/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/regions/store-retrieve-region/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/regions/page.mdx": "2024-06-09T15:19:09+02:00",
|
||||||
|
"app/storefront-development/tips/page.mdx": "2024-06-13T12:21:54+03:00",
|
||||||
|
"app/storefront-development/page.mdx": "2024-06-09T15:19:09+02:00",
|
||||||
|
"app/troubleshooting/cors-errors/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/troubleshooting/create-medusa-app-errors/page.mdx": "2024-07-11T10:29:13+03:00",
|
||||||
|
"app/troubleshooting/database-errors/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/troubleshooting/eaddrinuse/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/troubleshooting/errors-after-upgrading/page.mdx": "2024-07-11T10:29:13+03:00",
|
||||||
|
"app/troubleshooting/errors-installing-cli/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/troubleshooting/general-errors/page.mdx": "2024-05-03T17:36:38+03:00",
|
||||||
|
"app/troubleshooting/pnpm-errors/page.mdx": "2024-08-13T09:54:56+03:00",
|
||||||
|
"app/troubleshooting/s3/page.mdx": "2024-08-06T09:59:46+03:00",
|
||||||
|
"app/troubleshooting/page.mdx": "2024-07-18T08:57:11+02:00",
|
||||||
|
"app/upgrade-guides/page.mdx": "2024-07-18T08:57:11+02:00",
|
||||||
|
"app/usage/page.mdx": "2024-05-13T18:55:11+03:00",
|
||||||
|
"app/page.mdx": "2024-08-13T08:51:20+02:00",
|
||||||
|
"app/commerce-modules/auth/auth-providers/_google/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/commerce-modules/auth/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/auth/auth-flows/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/commerce-modules/auth/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/auth/auth-identity-and-actor-types/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/commerce-modules/api-key/page.mdx": "2024-08-05T07:24:27+00:00",
|
||||||
|
"app/commerce-modules/auth/create-actor-type/page.mdx": "2024-07-31T17:01:33+03:00",
|
||||||
|
"app/architectural-modules/page.mdx": "2024-05-28T13:25:03+03:00",
|
||||||
|
"app/commerce-modules/api-key/relations-to-other-modules/page.mdx": "2024-05-29T11:08:06+00:00",
|
||||||
|
"app/architectural-modules/workflow-engine/redis/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/commerce-modules/api-key/examples/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/architectural-modules/notification/sendgrid/page.mdx": "2024-08-05T07:21:11+00:00",
|
||||||
|
"app/commerce-modules/api-key/concepts/page.mdx": "2024-06-26T07:55:59+00:00",
|
||||||
|
"app/architectural-modules/workflow-engine/page.mdx": "2024-05-28T13:25:03+03:00",
|
||||||
|
"app/_events-reference/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/architectural-modules/cache/page.mdx": "2024-05-28T13:25:03+03:00",
|
||||||
|
"app/architectural-modules/file/s3/page.mdx": "2024-08-06T09:59:46+03:00",
|
||||||
|
"app/commerce-modules/api-key/_events/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/commerce-modules/api-key/_events/_events-table/page.mdx": "2024-07-03T19:27:13+03:00",
|
||||||
|
"app/architectural-modules/cache/redis/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/architectural-modules/event/redis/page.mdx": "2024-07-24T17:07:41+03:00",
|
||||||
|
"app/architectural-modules/event/local/page.mdx": "2024-07-24T17:07:41+03:00",
|
||||||
|
"app/architectural-modules/workflow-engine/in-memory/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/architectural-modules/cache/in-memory/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/architectural-modules/notification/local/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/architectural-modules/file/local/page.mdx": "2024-07-18T13:04:29+02:00",
|
||||||
|
"app/architectural-modules/notification/send-notification/page.mdx": "2024-08-06T09:59:46+03:00",
|
||||||
|
"app/architectural-modules/file/page.mdx": "2024-07-01T10:21:19+03:00",
|
||||||
|
"app/architectural-modules/event/page.mdx": "2024-05-28T13:25:03+03:00",
|
||||||
|
"app/architectural-modules/cache/create/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/admin-widget-injection-zones/page.mdx": "2024-05-29T13:50:19+03:00",
|
||||||
|
"app/architectural-modules/notification/page.mdx": "2024-07-04T17:26:03+03:00",
|
||||||
|
"app/architectural-modules/event/create/page.mdx": "2024-07-04T17:26:03+03:00"
|
||||||
|
}
|
||||||
@@ -9,6 +9,8 @@ import {
|
|||||||
import { useMemo } from "react"
|
import { useMemo } from "react"
|
||||||
import { config } from "../config"
|
import { config } from "../config"
|
||||||
import { basePathUrl } from "../utils/base-path-url"
|
import { basePathUrl } from "../utils/base-path-url"
|
||||||
|
import { usePathname } from "next/navigation"
|
||||||
|
import { generatedEditDates } from "../generated/edit-dates.mjs"
|
||||||
|
|
||||||
type MainNavProviderProps = {
|
type MainNavProviderProps = {
|
||||||
children?: React.ReactNode
|
children?: React.ReactNode
|
||||||
@@ -16,6 +18,7 @@ type MainNavProviderProps = {
|
|||||||
|
|
||||||
export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
||||||
const isBrowser = useIsBrowser()
|
const isBrowser = useIsBrowser()
|
||||||
|
const pathname = usePathname()
|
||||||
const navigationDropdownItems = useMemo(
|
const navigationDropdownItems = useMemo(
|
||||||
() =>
|
() =>
|
||||||
getNavDropdownItems({
|
getNavDropdownItems({
|
||||||
@@ -35,10 +38,19 @@ export const MainNavProvider = ({ children }: MainNavProviderProps) => {
|
|||||||
[isBrowser]
|
[isBrowser]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const editDate = useMemo(
|
||||||
|
() =>
|
||||||
|
(generatedEditDates as Record<string, string>)[
|
||||||
|
`app${pathname.replace(/\/$/, "")}/page.mdx`
|
||||||
|
],
|
||||||
|
[pathname]
|
||||||
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UiMainNavProvider
|
<UiMainNavProvider
|
||||||
navItems={navigationDropdownItems}
|
navItems={navigationDropdownItems}
|
||||||
reportIssueLink={reportLink}
|
reportIssueLink={reportLink}
|
||||||
|
editDate={editDate}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</UiMainNavProvider>
|
</UiMainNavProvider>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { generateSidebar } from "build-scripts"
|
import { generateEditedDates, generateSidebar } from "build-scripts"
|
||||||
import { main as generateSlugChanges } from "./generate-slug-changes.mjs"
|
import { main as generateSlugChanges } from "./generate-slug-changes.mjs"
|
||||||
import { main as generateFilesMap } from "./generate-files-map.mjs"
|
import { main as generateFilesMap } from "./generate-files-map.mjs"
|
||||||
import { sidebar } from "../sidebar.mjs"
|
import { sidebar } from "../sidebar.mjs"
|
||||||
@@ -7,6 +7,7 @@ async function main() {
|
|||||||
await generateSidebar(sidebar)
|
await generateSidebar(sidebar)
|
||||||
await generateSlugChanges()
|
await generateSlugChanges()
|
||||||
await generateFilesMap()
|
await generateFilesMap()
|
||||||
|
await generateEditedDates()
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|||||||
@@ -0,0 +1,156 @@
|
|||||||
|
import { exec } from "child_process"
|
||||||
|
import { existsSync } from "fs"
|
||||||
|
import { readdir, readFile, stat, writeFile } from "fs/promises"
|
||||||
|
import path from "path"
|
||||||
|
import util from "util"
|
||||||
|
|
||||||
|
const promiseExec = util.promisify(exec)
|
||||||
|
|
||||||
|
const projectBasePath = path.resolve()
|
||||||
|
const rootPath = path.resolve("..", "..", "..")
|
||||||
|
const monorepoRelativePath = projectBasePath
|
||||||
|
.replace(rootPath, "")
|
||||||
|
.replace(/^\//, "")
|
||||||
|
const generatedFilePath = path.join(
|
||||||
|
projectBasePath,
|
||||||
|
"generated",
|
||||||
|
"edit-dates.mjs"
|
||||||
|
)
|
||||||
|
|
||||||
|
const getGitEditDatesOfPaths = async (
|
||||||
|
paths: string[]
|
||||||
|
): Promise<Record<string, string>> => {
|
||||||
|
const editDates: Record<string, string> = {}
|
||||||
|
await Promise.all(
|
||||||
|
paths.map(async (filePath) => {
|
||||||
|
const editDateProcess = await promiseExec(
|
||||||
|
`git log -1 --pretty="format:%cI" ${filePath}`
|
||||||
|
)
|
||||||
|
|
||||||
|
editDates[filePath] = editDateProcess.stdout || new Date().toISOString()
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
return editDates
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: this gets the date a file was edited in the OS. One drawback here
|
||||||
|
// is if a file is edited on a day, but the PR is merged a few days later, so the
|
||||||
|
// date doesn't accurately represent the publish date of the file.
|
||||||
|
const getOsLastEditDates = async (
|
||||||
|
paths: string[]
|
||||||
|
): Promise<Record<string, string>> => {
|
||||||
|
const editDates: Record<string, string> = {}
|
||||||
|
await Promise.all(
|
||||||
|
paths.map(async (filePath) => {
|
||||||
|
const fileStat = await stat(filePath)
|
||||||
|
|
||||||
|
editDates[filePath] = fileStat.mtime.toISOString()
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
return editDates
|
||||||
|
}
|
||||||
|
|
||||||
|
const getChangedFiles = async (): Promise<string[]> => {
|
||||||
|
const changedFiles: string[] = []
|
||||||
|
|
||||||
|
// get untracked files
|
||||||
|
const untrackedFiles = await promiseExec(
|
||||||
|
`git ls-files --other --exclude-standard`
|
||||||
|
)
|
||||||
|
|
||||||
|
untrackedFiles.stdout.split("\n").forEach((file) => {
|
||||||
|
if (path.basename(file) !== "page.mdx") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
changedFiles.push(path.relative(projectBasePath, file))
|
||||||
|
})
|
||||||
|
|
||||||
|
// get tracked files
|
||||||
|
const trackedFiles = await promiseExec(
|
||||||
|
`{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq`
|
||||||
|
)
|
||||||
|
|
||||||
|
trackedFiles.stdout.split("\n").forEach((file) => {
|
||||||
|
// The above command retrieve the full file path relative to the monorepo
|
||||||
|
// so all parts before the project's path should be removed.
|
||||||
|
if (
|
||||||
|
!file.startsWith(monorepoRelativePath) ||
|
||||||
|
path.basename(file) !== "page.mdx"
|
||||||
|
) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
changedFiles.push(file.replace(`${monorepoRelativePath}/`, ""))
|
||||||
|
})
|
||||||
|
|
||||||
|
return changedFiles
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllProjectFiles = async (): Promise<string[]> => {
|
||||||
|
const appDir = path.join(projectBasePath, "app")
|
||||||
|
|
||||||
|
const allFiles: string[] = []
|
||||||
|
const filesInDir = await readdir(appDir, {
|
||||||
|
withFileTypes: true,
|
||||||
|
recursive: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
filesInDir.forEach((file) => {
|
||||||
|
if (file.isDirectory() || path.basename(file.name) !== "page.mdx") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const fullFilePath = path.join(file.path, file.name)
|
||||||
|
|
||||||
|
// TODO check if this produces correct file paths
|
||||||
|
allFiles.push(path.relative(projectBasePath, fullFilePath))
|
||||||
|
})
|
||||||
|
|
||||||
|
return allFiles
|
||||||
|
}
|
||||||
|
|
||||||
|
export const generateEditedDates = async () => {
|
||||||
|
const generatedFileExists = existsSync(generatedFilePath)
|
||||||
|
const type = generatedFileExists ? "git" : "all"
|
||||||
|
|
||||||
|
let files: string[] = []
|
||||||
|
let editDates: Record<string, string> = {}
|
||||||
|
|
||||||
|
if (type === "all") {
|
||||||
|
// get all files in a project
|
||||||
|
files = await getAllProjectFiles()
|
||||||
|
editDates = await getGitEditDatesOfPaths(files)
|
||||||
|
} else {
|
||||||
|
// set the last edit dates for git changes only
|
||||||
|
files = await getChangedFiles()
|
||||||
|
editDates = await getOsLastEditDates(files)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!files.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileContentPrefix = `export const generatedEditDates = `
|
||||||
|
|
||||||
|
if (generatedFileExists) {
|
||||||
|
const existingEditDates = JSON.parse(
|
||||||
|
(await readFile(generatedFilePath, "utf-8")).replace(
|
||||||
|
fileContentPrefix,
|
||||||
|
""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
editDates = Object.assign(existingEditDates, editDates)
|
||||||
|
}
|
||||||
|
|
||||||
|
await writeFile(
|
||||||
|
generatedFilePath,
|
||||||
|
`${fileContentPrefix}${JSON.stringify(editDates, undefined, 2)}`,
|
||||||
|
{
|
||||||
|
flag: "w",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
export * from "./generate-edited-dates.js"
|
||||||
export * from "./generate-sidebar.js"
|
export * from "./generate-sidebar.js"
|
||||||
|
|
||||||
export * from "./utils/find-metadata-title.js"
|
export * from "./utils/find-metadata-title.js"
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ import React from "react"
|
|||||||
export const MainNavDivider = () => {
|
export const MainNavDivider = () => {
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
className={clsx(
|
className={clsx("h-docs_0.75 w-px block bg-medusa-border-base")}
|
||||||
"h-docs_0.75 w-px block bg-medusa-border-base",
|
|
||||||
"mx-docs_0.5"
|
|
||||||
)}
|
|
||||||
></span>
|
></span>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import React from "react"
|
||||||
|
|
||||||
|
const DATE_REGEX = /^[a-zA-Z]+ (?<month>[a-zA-Z]+)/
|
||||||
|
|
||||||
|
type MainNavEditDateProps = {
|
||||||
|
date: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MainNavEditDate = ({ date }: MainNavEditDateProps) => {
|
||||||
|
const today = new Date(date)
|
||||||
|
const dateObj = new Date(date)
|
||||||
|
const formattedDate = dateObj.toString()
|
||||||
|
const dateMatch = DATE_REGEX.exec(formattedDate)
|
||||||
|
|
||||||
|
if (!dateMatch?.groups?.month) {
|
||||||
|
return <></>
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<span>
|
||||||
|
Edited {dateMatch.groups.month} {dateObj.getDate()}
|
||||||
|
{dateObj.getFullYear() !== today.getFullYear()
|
||||||
|
? `, ${dateObj.getFullYear()}`
|
||||||
|
: ""}
|
||||||
|
</span>
|
||||||
|
<span className="text-compact-small-plus">·</span>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -11,9 +11,10 @@ import { MainNavDivider } from "./Divider"
|
|||||||
import { MainNavSidebarOpener } from "./SidebarOpener"
|
import { MainNavSidebarOpener } from "./SidebarOpener"
|
||||||
import { MainNavHelpButton } from "./HelpButton"
|
import { MainNavHelpButton } from "./HelpButton"
|
||||||
import { SidebarLeftIcon } from "../Icons/SidebarLeft"
|
import { SidebarLeftIcon } from "../Icons/SidebarLeft"
|
||||||
|
import { MainNavEditDate } from "./EditDate"
|
||||||
|
|
||||||
export const MainNav = () => {
|
export const MainNav = () => {
|
||||||
const { reportIssueLink } = useMainNav()
|
const { reportIssueLink, editDate } = useMainNav()
|
||||||
const { setMobileSidebarOpen } = useSidebar()
|
const { setMobileSidebarOpen } = useSidebar()
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -35,14 +36,17 @@ export const MainNav = () => {
|
|||||||
<MainNavigationDropdown />
|
<MainNavigationDropdown />
|
||||||
<MainNavBreadcrumbs />
|
<MainNavBreadcrumbs />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-docs_0.25">
|
<div className="flex items-center gap-docs_0.75">
|
||||||
<Link href={reportIssueLink} className="text-medusa-fg-muted">
|
<div className="flex items-center gap-[6px] text-medusa-fg-muted">
|
||||||
Report Issue
|
{editDate && <MainNavEditDate date={editDate} />}
|
||||||
</Link>
|
<Link href={reportIssueLink}>Report Issue</Link>
|
||||||
|
</div>
|
||||||
<MainNavDivider />
|
<MainNavDivider />
|
||||||
<MainNavHelpButton />
|
<div className="flex items-center gap-docs_0.25">
|
||||||
<MainNavColorMode />
|
<MainNavHelpButton />
|
||||||
<SearchModalOpener />
|
<MainNavColorMode />
|
||||||
|
<SearchModalOpener />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import React, { createContext, useContext, useMemo, useState } from "react"
|
import React, { createContext, useContext, useMemo } from "react"
|
||||||
import { NavigationDropdownItem } from "types"
|
import { NavigationDropdownItem } from "types"
|
||||||
|
|
||||||
export type MainNavContext = {
|
export type MainNavContext = {
|
||||||
navItems: NavigationDropdownItem[]
|
navItems: NavigationDropdownItem[]
|
||||||
activeItem?: NavigationDropdownItem
|
activeItem?: NavigationDropdownItem
|
||||||
reportIssueLink: string
|
reportIssueLink: string
|
||||||
|
editDate?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const MainNavContext = createContext<MainNavContext | null>(null)
|
const MainNavContext = createContext<MainNavContext | null>(null)
|
||||||
@@ -14,6 +15,7 @@ const MainNavContext = createContext<MainNavContext | null>(null)
|
|||||||
export type MainNavProviderProps = {
|
export type MainNavProviderProps = {
|
||||||
navItems: NavigationDropdownItem[]
|
navItems: NavigationDropdownItem[]
|
||||||
reportIssueLink: string
|
reportIssueLink: string
|
||||||
|
editDate?: string
|
||||||
children?: React.ReactNode
|
children?: React.ReactNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,6 +23,7 @@ export const MainNavProvider = ({
|
|||||||
navItems,
|
navItems,
|
||||||
reportIssueLink,
|
reportIssueLink,
|
||||||
children,
|
children,
|
||||||
|
editDate,
|
||||||
}: MainNavProviderProps) => {
|
}: MainNavProviderProps) => {
|
||||||
const activeItem = useMemo(
|
const activeItem = useMemo(
|
||||||
() => navItems.find((item) => item.type === "link" && item.isActive),
|
() => navItems.find((item) => item.type === "link" && item.isActive),
|
||||||
@@ -33,6 +36,7 @@ export const MainNavProvider = ({
|
|||||||
navItems,
|
navItems,
|
||||||
activeItem,
|
activeItem,
|
||||||
reportIssueLink,
|
reportIssueLink,
|
||||||
|
editDate,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
"tsBuildInfoFile": "./dist/.tsbuildinfo-client",
|
"tsBuildInfoFile": "./dist/.tsbuildinfo-client",
|
||||||
"noEmit": false,
|
"noEmit": false,
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"lib": ["dom", "ES2015", "es2022"],
|
"lib": ["dom", "es2022"],
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"target": "es6",
|
"target": "ESNext",
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"declarationMap": true
|
"declarationMap": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6013,6 +6013,7 @@ __metadata:
|
|||||||
"@types/react": ^18.2.0
|
"@types/react": ^18.2.0
|
||||||
"@types/react-dom": ^18.2.0
|
"@types/react-dom": ^18.2.0
|
||||||
autoprefixer: ^10.0.1
|
autoprefixer: ^10.0.1
|
||||||
|
build-scripts: "*"
|
||||||
clsx: ^2.1.0
|
clsx: ^2.1.0
|
||||||
docs-ui: "*"
|
docs-ui: "*"
|
||||||
eslint: ^8
|
eslint: ^8
|
||||||
|
|||||||
Reference in New Issue
Block a user