docs: added edit date (#8623)

This commit is contained in:
Shahed Nasser
2024-08-19 09:47:57 +03:00
committed by GitHub
parent 8c784a8b30
commit c479fe8220
16 changed files with 575 additions and 17 deletions
+3
View File
@@ -8,4 +8,7 @@ module.exports = {
rootDir: ".", rootDir: ".",
}, },
}, },
ignorePatterns: [
"generated"
]
} }
+70
View File
@@ -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"
}
+3 -1
View File
@@ -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",
+12
View File
@@ -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>
+7
View File
@@ -0,0 +1,7 @@
import { generateEditedDates } from "build-scripts"
async function main() {
await generateEditedDates()
}
void main()
+258
View File
@@ -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"
}
+12
View File
@@ -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>
+2 -1
View File
@@ -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
View File
@@ -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">&#183;</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}
+2 -2
View File
@@ -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
}, },
+1
View File
@@ -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