create-nextjs-cms 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/dist/helpers/utils.js +16 -16
- package/dist/lib/section-creators.js +166 -166
- package/package.json +3 -3
- package/templates/default/.eslintrc.json +5 -5
- package/templates/default/.prettierignore +7 -7
- package/templates/default/.prettierrc.json +27 -27
- package/templates/default/CHANGELOG.md +140 -140
- package/templates/default/_gitignore +57 -57
- package/templates/default/app/(auth)/auth/login/LoginPage.tsx +192 -192
- package/templates/default/app/(auth)/auth/login/page.tsx +11 -11
- package/templates/default/app/(auth)/auth-locale-provider.tsx +34 -34
- package/templates/default/app/(auth)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/page.tsx +40 -40
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/plugin-server-registry.ts +22 -22
- package/templates/default/app/(rootLayout)/admins/page.tsx +10 -10
- package/templates/default/app/(rootLayout)/browse/[section]/[page]/page.tsx +22 -22
- package/templates/default/app/(rootLayout)/categorized/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/dashboard/page.tsx +63 -63
- package/templates/default/app/(rootLayout)/dashboard-new/page.tsx +7 -7
- package/templates/default/app/(rootLayout)/edit/[section]/[itemId]/page.tsx +17 -17
- package/templates/default/app/(rootLayout)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/loading.tsx +10 -10
- package/templates/default/app/(rootLayout)/log/page.tsx +7 -7
- package/templates/default/app/(rootLayout)/new/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/section/[section]/page.tsx +16 -16
- package/templates/default/app/(rootLayout)/settings/page.tsx +13 -13
- package/templates/default/app/_trpc/client.ts +3 -3
- package/templates/default/app/api/auth/csrf/route.ts +25 -25
- package/templates/default/app/api/auth/refresh/route.ts +10 -10
- package/templates/default/app/api/auth/session/route.ts +20 -20
- package/templates/default/app/api/editor/photo/route.ts +49 -49
- package/templates/default/app/api/photo/route.ts +27 -27
- package/templates/default/app/api/submit/section/item/[slug]/route.ts +66 -66
- package/templates/default/app/api/submit/section/item/route.ts +56 -56
- package/templates/default/app/api/submit/section/simple/route.ts +57 -57
- package/templates/default/app/api/trpc/[trpc]/route.ts +33 -33
- package/templates/default/app/api/video/route.ts +174 -174
- package/templates/default/app/globals.css +219 -219
- package/templates/default/app/providers.tsx +152 -152
- package/templates/default/cms.config.ts +49 -52
- package/templates/default/components/AdminCard.tsx +166 -166
- package/templates/default/components/AdminEditPage.tsx +124 -124
- package/templates/default/components/AdminPrivilegeCard.tsx +185 -185
- package/templates/default/components/AdminsPage.tsx +43 -43
- package/templates/default/components/AnalyticsPage.tsx +128 -128
- package/templates/default/components/BarChartBox.tsx +42 -42
- package/templates/default/components/BrowsePage.tsx +106 -106
- package/templates/default/components/CategorizedSectionPage.tsx +31 -31
- package/templates/default/components/CategoryDeleteConfirmPage.tsx +130 -130
- package/templates/default/components/CategorySectionSelectInput.tsx +140 -140
- package/templates/default/components/ConditionalFields.tsx +49 -49
- package/templates/default/components/ContainerBox.tsx +24 -24
- package/templates/default/components/DashboardNewPage.tsx +253 -253
- package/templates/default/components/DashboardPage.tsx +188 -188
- package/templates/default/components/DashboardPageAlt.tsx +45 -45
- package/templates/default/components/DefaultNavItems.tsx +3 -3
- package/templates/default/components/Dropzone.tsx +154 -154
- package/templates/default/components/EmailCard.tsx +138 -138
- package/templates/default/components/EmailPasswordForm.tsx +85 -85
- package/templates/default/components/EmailQuotaForm.tsx +73 -73
- package/templates/default/components/EmailsPage.tsx +49 -49
- package/templates/default/components/ErrorComponent.tsx +16 -16
- package/templates/default/components/GalleryPhoto.tsx +93 -93
- package/templates/default/components/InfoCard.tsx +93 -93
- package/templates/default/components/ItemEditPage.tsx +214 -214
- package/templates/default/components/Layout.tsx +84 -84
- package/templates/default/components/LoadingSpinners.tsx +67 -67
- package/templates/default/components/LogPage.tsx +107 -107
- package/templates/default/components/Modal.tsx +166 -166
- package/templates/default/components/Navbar.tsx +258 -258
- package/templates/default/components/NewAdminForm.tsx +173 -173
- package/templates/default/components/NewEmailForm.tsx +132 -132
- package/templates/default/components/NewPage.tsx +205 -205
- package/templates/default/components/NewVariantComponent.tsx +229 -229
- package/templates/default/components/PhotoGallery.tsx +35 -35
- package/templates/default/components/PieChartBox.tsx +101 -101
- package/templates/default/components/ProgressBar.tsx +48 -48
- package/templates/default/components/ProtectedDocument.tsx +78 -78
- package/templates/default/components/ProtectedImage.tsx +143 -143
- package/templates/default/components/ProtectedVideo.tsx +76 -76
- package/templates/default/components/SectionItemCard.tsx +144 -144
- package/templates/default/components/SectionItemStatusBadge.tsx +17 -17
- package/templates/default/components/SectionPage.tsx +125 -125
- package/templates/default/components/SelectBox.tsx +98 -98
- package/templates/default/components/SelectInputButtons.tsx +125 -125
- package/templates/default/components/SettingsPage.tsx +232 -232
- package/templates/default/components/Sidebar.tsx +201 -201
- package/templates/default/components/SidebarDropdownItem.tsx +80 -80
- package/templates/default/components/SidebarItem.tsx +20 -20
- package/templates/default/components/ThemeProvider.tsx +8 -8
- package/templates/default/components/TooltipComponent.tsx +27 -27
- package/templates/default/components/VariantCard.tsx +124 -124
- package/templates/default/components/VariantEditPage.tsx +230 -230
- package/templates/default/components/analytics/BounceRate.tsx +70 -70
- package/templates/default/components/analytics/LivePageViews.tsx +55 -55
- package/templates/default/components/analytics/LiveUsersCount.tsx +33 -33
- package/templates/default/components/analytics/MonthlyPageViews.tsx +42 -42
- package/templates/default/components/analytics/TopCountries.tsx +52 -52
- package/templates/default/components/analytics/TopDevices.tsx +46 -46
- package/templates/default/components/analytics/TopMediums.tsx +58 -58
- package/templates/default/components/analytics/TopSources.tsx +45 -45
- package/templates/default/components/analytics/TotalPageViews.tsx +41 -41
- package/templates/default/components/analytics/TotalSessions.tsx +41 -41
- package/templates/default/components/analytics/TotalUniqueUsers.tsx +41 -41
- package/templates/default/components/custom/RightHomeRoomVariantCard.tsx +138 -138
- package/templates/default/components/dndKit/Draggable.tsx +21 -21
- package/templates/default/components/dndKit/Droppable.tsx +20 -20
- package/templates/default/components/dndKit/SortableItem.tsx +18 -18
- package/templates/default/components/form/DateRangeFormInput.tsx +57 -57
- package/templates/default/components/form/Form.tsx +317 -317
- package/templates/default/components/form/FormInputElement.tsx +70 -70
- package/templates/default/components/form/FormInputs.tsx +112 -112
- package/templates/default/components/form/helpers/_section-hot-reload.js +1 -1
- package/templates/default/components/form/helpers/util.ts +17 -17
- package/templates/default/components/form/inputs/CheckboxFormInput.tsx +33 -33
- package/templates/default/components/form/inputs/ColorFormInput.tsx +44 -44
- package/templates/default/components/form/inputs/DateFormInput.tsx +156 -156
- package/templates/default/components/form/inputs/DocumentFormInput.tsx +222 -222
- package/templates/default/components/form/inputs/MapFormInput.tsx +140 -140
- package/templates/default/components/form/inputs/MultipleSelectFormInput.tsx +83 -83
- package/templates/default/components/form/inputs/NumberFormInput.tsx +42 -42
- package/templates/default/components/form/inputs/PasswordFormInput.tsx +47 -47
- package/templates/default/components/form/inputs/PhotoFormInput.tsx +219 -219
- package/templates/default/components/form/inputs/RichTextFormInput.tsx +135 -135
- package/templates/default/components/form/inputs/SelectFormInput.tsx +175 -175
- package/templates/default/components/form/inputs/SlugFormInput.tsx +129 -129
- package/templates/default/components/form/inputs/TagsFormInput.tsx +154 -154
- package/templates/default/components/form/inputs/TextFormInput.tsx +48 -48
- package/templates/default/components/form/inputs/TextareaFormInput.tsx +47 -47
- package/templates/default/components/form/inputs/VideoFormInput.tsx +118 -118
- package/templates/default/components/locale-dropdown.tsx +74 -74
- package/templates/default/components/locale-picker.tsx +85 -85
- package/templates/default/components/login-locale-dropdown.tsx +46 -46
- package/templates/default/components/multi-select.tsx +1144 -1144
- package/templates/default/components/pagination/Pagination.tsx +36 -36
- package/templates/default/components/pagination/PaginationButtons.tsx +147 -147
- package/templates/default/components/theme-toggle.tsx +37 -37
- package/templates/default/components/ui/accordion.tsx +53 -53
- package/templates/default/components/ui/alert-dialog.tsx +157 -157
- package/templates/default/components/ui/alert.tsx +46 -46
- package/templates/default/components/ui/badge.tsx +38 -38
- package/templates/default/components/ui/button.tsx +62 -62
- package/templates/default/components/ui/calendar.tsx +166 -166
- package/templates/default/components/ui/card.tsx +43 -43
- package/templates/default/components/ui/checkbox.tsx +29 -29
- package/templates/default/components/ui/command.tsx +137 -137
- package/templates/default/components/ui/custom-alert-dialog.tsx +113 -113
- package/templates/default/components/ui/custom-dialog.tsx +123 -123
- package/templates/default/components/ui/dialog.tsx +123 -123
- package/templates/default/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/components/ui/input-group.tsx +54 -54
- package/templates/default/components/ui/input.tsx +22 -22
- package/templates/default/components/ui/label.tsx +19 -19
- package/templates/default/components/ui/popover.tsx +42 -42
- package/templates/default/components/ui/progress.tsx +31 -31
- package/templates/default/components/ui/scroll-area.tsx +42 -42
- package/templates/default/components/ui/select.tsx +165 -165
- package/templates/default/components/ui/separator.tsx +28 -28
- package/templates/default/components/ui/sheet.tsx +103 -103
- package/templates/default/components/ui/switch.tsx +29 -29
- package/templates/default/components/ui/table.tsx +83 -83
- package/templates/default/components/ui/tabs.tsx +55 -55
- package/templates/default/components/ui/toast.tsx +113 -113
- package/templates/default/components/ui/toaster.tsx +35 -35
- package/templates/default/components/ui/tooltip.tsx +30 -30
- package/templates/default/components/ui/use-toast.ts +188 -188
- package/templates/default/components.json +21 -21
- package/templates/default/context/ModalProvider.tsx +53 -53
- package/templates/default/drizzle.config.ts +4 -4
- package/templates/default/dynamic-schemas/schema.ts +10 -0
- package/templates/default/env/env.js +130 -130
- package/templates/default/envConfig.ts +4 -4
- package/templates/default/hooks/useModal.ts +8 -8
- package/templates/default/lib/apiHelpers.ts +92 -92
- package/templates/default/lib/postinstall.js +14 -14
- package/templates/default/lib/utils.ts +6 -6
- package/templates/default/next-env.d.ts +6 -6
- package/templates/default/next.config.ts +23 -23
- package/templates/default/package.json +2 -4
- package/templates/default/postcss.config.mjs +6 -6
- package/templates/default/proxy.ts +32 -32
- package/templates/default/tsconfig.json +48 -48
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import { QueryClient, QueryClientProvider, defaultShouldDehydrateQuery } from '@tanstack/react-query'
|
|
4
|
-
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
|
|
5
|
-
import { ModalProvider } from '@/context/ModalProvider'
|
|
6
|
-
import { trpc } from '@/app/_trpc/client'
|
|
7
|
-
import { httpBatchLink, loggerLink } from '@trpc/client'
|
|
8
|
-
import SuperJSON from 'superjson'
|
|
9
|
-
import { useState } from 'react'
|
|
10
|
-
import { getCsrfToken, SessionProvider, refreshTokenLink } from 'nextjs-cms/auth/react'
|
|
11
|
-
import { Session } from 'nextjs-cms/auth'
|
|
12
|
-
|
|
13
|
-
function MakeTrpcClient() {
|
|
14
|
-
const [trpcClient] = useState(() =>
|
|
15
|
-
trpc.createClient({
|
|
16
|
-
links: [
|
|
17
|
-
/**
|
|
18
|
-
* The refresh token link will automatically refresh the access token if it's expired.
|
|
19
|
-
* It fetches the new access token using the refresh token by calling the `/api/auth/refresh` endpoint.
|
|
20
|
-
*/
|
|
21
|
-
refreshTokenLink(),
|
|
22
|
-
/**
|
|
23
|
-
* The logger link will log all the operations that are being sent to the server.
|
|
24
|
-
* @see https://trpc.io/docs/client/links/loggerLink
|
|
25
|
-
*/
|
|
26
|
-
loggerLink({
|
|
27
|
-
enabled: (op) =>
|
|
28
|
-
process.env.NODE_ENV === 'development' ||
|
|
29
|
-
(op.direction === 'down' && op.result instanceof Error),
|
|
30
|
-
}),
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* The HTTP batch link is used to send multiple operations in a single HTTP request,
|
|
34
|
-
* but doesn't wait for all the responses of the batch to be ready,
|
|
35
|
-
* and streams the responses as soon as any data is available.
|
|
36
|
-
* @see https://trpc.io/docs/client/links/httpBatchStreamLink
|
|
37
|
-
*
|
|
38
|
-
* TODO: The stream link is somehow causing empty responses before the actual response!
|
|
39
|
-
*/
|
|
40
|
-
/*unstable_httpBatchStreamLink({
|
|
41
|
-
transformer: superjson,
|
|
42
|
-
url: '/api/trpc',
|
|
43
|
-
// You can pass any HTTP headers you wish here
|
|
44
|
-
async headers() {
|
|
45
|
-
const headers = new Headers()
|
|
46
|
-
headers.set('x-trpc-source', 'nextjs-react')
|
|
47
|
-
headers.set('Authorization', `Bearer ${authStore.state.accessToken}`)
|
|
48
|
-
return headers
|
|
49
|
-
},
|
|
50
|
-
}),*/
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The HTTP batch link is used to send multiple operations in a single HTTP request.
|
|
54
|
-
* @see https://trpc.io/docs/client/links/httpBatchLink
|
|
55
|
-
*/
|
|
56
|
-
httpBatchLink({
|
|
57
|
-
transformer: SuperJSON,
|
|
58
|
-
url: '/api/trpc',
|
|
59
|
-
// You can pass any HTTP headers you wish here
|
|
60
|
-
async headers(op) {
|
|
61
|
-
const headers = new Headers()
|
|
62
|
-
/**
|
|
63
|
-
* Check if there are any mutations in the operations list
|
|
64
|
-
*/
|
|
65
|
-
if (op.opList.some((o) => o.type === 'mutation')) {
|
|
66
|
-
/**
|
|
67
|
-
* Get the CSRF token, and set it in the headers
|
|
68
|
-
*/
|
|
69
|
-
const csrfToken = await getCsrfToken()
|
|
70
|
-
headers.set('x-csrf-token', csrfToken)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
headers.set('x-trpc-source', 'nextjs-react')
|
|
74
|
-
|
|
75
|
-
return headers
|
|
76
|
-
},
|
|
77
|
-
}),
|
|
78
|
-
],
|
|
79
|
-
}),
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
return trpcClient
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function createQueryClient() {
|
|
86
|
-
return new QueryClient({
|
|
87
|
-
defaultOptions: {
|
|
88
|
-
queries: {
|
|
89
|
-
// With SSR, we usually want to set some default staleTime
|
|
90
|
-
// above 0 to avoid refetching immediately on the client
|
|
91
|
-
/**
|
|
92
|
-
* It's better to leave the staleTime to 0 to always fetch the latest data in a cms
|
|
93
|
-
*/
|
|
94
|
-
// staleTime: 3 * 1000,
|
|
95
|
-
/**
|
|
96
|
-
* We want to refetch on window focus in development only
|
|
97
|
-
*/
|
|
98
|
-
refetchOnWindowFocus: process.env.NODE_ENV === 'development' ? true : false,
|
|
99
|
-
retry: 1, // default: 3
|
|
100
|
-
},
|
|
101
|
-
dehydrate: {
|
|
102
|
-
serializeData: SuperJSON.serialize,
|
|
103
|
-
shouldDehydrateQuery: (query) => defaultShouldDehydrateQuery(query) || query.state.status === 'pending',
|
|
104
|
-
},
|
|
105
|
-
hydrate: {
|
|
106
|
-
deserializeData: SuperJSON.deserialize,
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
})
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
let browserQueryClient: QueryClient | undefined = undefined
|
|
113
|
-
|
|
114
|
-
function getQueryClient() {
|
|
115
|
-
if (typeof window === 'undefined') {
|
|
116
|
-
// Server: always make a new query client
|
|
117
|
-
return createQueryClient()
|
|
118
|
-
} else {
|
|
119
|
-
// Browser: make a new query client if we don't already have one
|
|
120
|
-
// This is very important so we don't re-make a new client if React
|
|
121
|
-
// suspends during the initial render. This may not be needed if we
|
|
122
|
-
// have a suspense boundary BELOW the creation of the query client
|
|
123
|
-
if (!browserQueryClient) browserQueryClient = createQueryClient()
|
|
124
|
-
return browserQueryClient
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export default function Providers({ children, session }: { children: React.ReactNode; session: Session | undefined }) {
|
|
129
|
-
// NOTE: Avoid useState when initializing the query client if you don't
|
|
130
|
-
// have a suspense boundary between this and the code that may
|
|
131
|
-
// suspend because React will throw away the client on the initial
|
|
132
|
-
// render if it suspends and there is no boundary
|
|
133
|
-
const queryClient = getQueryClient()
|
|
134
|
-
// const trpcClient = getTrpcClient()
|
|
135
|
-
const trpcClient = MakeTrpcClient()
|
|
136
|
-
|
|
137
|
-
return (
|
|
138
|
-
<QueryClientProvider client={queryClient}>
|
|
139
|
-
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
|
140
|
-
<SessionProvider
|
|
141
|
-
session={session}
|
|
142
|
-
refetchOnWindowFocus={false}
|
|
143
|
-
refetchInterval={0}
|
|
144
|
-
refetchWhenOffline={false}
|
|
145
|
-
>
|
|
146
|
-
<ModalProvider>{children}</ModalProvider>
|
|
147
|
-
</SessionProvider>
|
|
148
|
-
<ReactQueryDevtools initialIsOpen={false} />
|
|
149
|
-
</trpc.Provider>
|
|
150
|
-
</QueryClientProvider>
|
|
151
|
-
)
|
|
152
|
-
}
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { QueryClient, QueryClientProvider, defaultShouldDehydrateQuery } from '@tanstack/react-query'
|
|
4
|
+
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
|
|
5
|
+
import { ModalProvider } from '@/context/ModalProvider'
|
|
6
|
+
import { trpc } from '@/app/_trpc/client'
|
|
7
|
+
import { httpBatchLink, loggerLink } from '@trpc/client'
|
|
8
|
+
import SuperJSON from 'superjson'
|
|
9
|
+
import { useState } from 'react'
|
|
10
|
+
import { getCsrfToken, SessionProvider, refreshTokenLink } from 'nextjs-cms/auth/react'
|
|
11
|
+
import { Session } from 'nextjs-cms/auth'
|
|
12
|
+
|
|
13
|
+
function MakeTrpcClient() {
|
|
14
|
+
const [trpcClient] = useState(() =>
|
|
15
|
+
trpc.createClient({
|
|
16
|
+
links: [
|
|
17
|
+
/**
|
|
18
|
+
* The refresh token link will automatically refresh the access token if it's expired.
|
|
19
|
+
* It fetches the new access token using the refresh token by calling the `/api/auth/refresh` endpoint.
|
|
20
|
+
*/
|
|
21
|
+
refreshTokenLink(),
|
|
22
|
+
/**
|
|
23
|
+
* The logger link will log all the operations that are being sent to the server.
|
|
24
|
+
* @see https://trpc.io/docs/client/links/loggerLink
|
|
25
|
+
*/
|
|
26
|
+
loggerLink({
|
|
27
|
+
enabled: (op) =>
|
|
28
|
+
process.env.NODE_ENV === 'development' ||
|
|
29
|
+
(op.direction === 'down' && op.result instanceof Error),
|
|
30
|
+
}),
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The HTTP batch link is used to send multiple operations in a single HTTP request,
|
|
34
|
+
* but doesn't wait for all the responses of the batch to be ready,
|
|
35
|
+
* and streams the responses as soon as any data is available.
|
|
36
|
+
* @see https://trpc.io/docs/client/links/httpBatchStreamLink
|
|
37
|
+
*
|
|
38
|
+
* TODO: The stream link is somehow causing empty responses before the actual response!
|
|
39
|
+
*/
|
|
40
|
+
/*unstable_httpBatchStreamLink({
|
|
41
|
+
transformer: superjson,
|
|
42
|
+
url: '/api/trpc',
|
|
43
|
+
// You can pass any HTTP headers you wish here
|
|
44
|
+
async headers() {
|
|
45
|
+
const headers = new Headers()
|
|
46
|
+
headers.set('x-trpc-source', 'nextjs-react')
|
|
47
|
+
headers.set('Authorization', `Bearer ${authStore.state.accessToken}`)
|
|
48
|
+
return headers
|
|
49
|
+
},
|
|
50
|
+
}),*/
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The HTTP batch link is used to send multiple operations in a single HTTP request.
|
|
54
|
+
* @see https://trpc.io/docs/client/links/httpBatchLink
|
|
55
|
+
*/
|
|
56
|
+
httpBatchLink({
|
|
57
|
+
transformer: SuperJSON,
|
|
58
|
+
url: '/api/trpc',
|
|
59
|
+
// You can pass any HTTP headers you wish here
|
|
60
|
+
async headers(op) {
|
|
61
|
+
const headers = new Headers()
|
|
62
|
+
/**
|
|
63
|
+
* Check if there are any mutations in the operations list
|
|
64
|
+
*/
|
|
65
|
+
if (op.opList.some((o) => o.type === 'mutation')) {
|
|
66
|
+
/**
|
|
67
|
+
* Get the CSRF token, and set it in the headers
|
|
68
|
+
*/
|
|
69
|
+
const csrfToken = await getCsrfToken()
|
|
70
|
+
headers.set('x-csrf-token', csrfToken)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
headers.set('x-trpc-source', 'nextjs-react')
|
|
74
|
+
|
|
75
|
+
return headers
|
|
76
|
+
},
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
}),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
return trpcClient
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function createQueryClient() {
|
|
86
|
+
return new QueryClient({
|
|
87
|
+
defaultOptions: {
|
|
88
|
+
queries: {
|
|
89
|
+
// With SSR, we usually want to set some default staleTime
|
|
90
|
+
// above 0 to avoid refetching immediately on the client
|
|
91
|
+
/**
|
|
92
|
+
* It's better to leave the staleTime to 0 to always fetch the latest data in a cms
|
|
93
|
+
*/
|
|
94
|
+
// staleTime: 3 * 1000,
|
|
95
|
+
/**
|
|
96
|
+
* We want to refetch on window focus in development only
|
|
97
|
+
*/
|
|
98
|
+
refetchOnWindowFocus: process.env.NODE_ENV === 'development' ? true : false,
|
|
99
|
+
retry: 1, // default: 3
|
|
100
|
+
},
|
|
101
|
+
dehydrate: {
|
|
102
|
+
serializeData: SuperJSON.serialize,
|
|
103
|
+
shouldDehydrateQuery: (query) => defaultShouldDehydrateQuery(query) || query.state.status === 'pending',
|
|
104
|
+
},
|
|
105
|
+
hydrate: {
|
|
106
|
+
deserializeData: SuperJSON.deserialize,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let browserQueryClient: QueryClient | undefined = undefined
|
|
113
|
+
|
|
114
|
+
function getQueryClient() {
|
|
115
|
+
if (typeof window === 'undefined') {
|
|
116
|
+
// Server: always make a new query client
|
|
117
|
+
return createQueryClient()
|
|
118
|
+
} else {
|
|
119
|
+
// Browser: make a new query client if we don't already have one
|
|
120
|
+
// This is very important so we don't re-make a new client if React
|
|
121
|
+
// suspends during the initial render. This may not be needed if we
|
|
122
|
+
// have a suspense boundary BELOW the creation of the query client
|
|
123
|
+
if (!browserQueryClient) browserQueryClient = createQueryClient()
|
|
124
|
+
return browserQueryClient
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export default function Providers({ children, session }: { children: React.ReactNode; session: Session | undefined }) {
|
|
129
|
+
// NOTE: Avoid useState when initializing the query client if you don't
|
|
130
|
+
// have a suspense boundary between this and the code that may
|
|
131
|
+
// suspend because React will throw away the client on the initial
|
|
132
|
+
// render if it suspends and there is no boundary
|
|
133
|
+
const queryClient = getQueryClient()
|
|
134
|
+
// const trpcClient = getTrpcClient()
|
|
135
|
+
const trpcClient = MakeTrpcClient()
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<QueryClientProvider client={queryClient}>
|
|
139
|
+
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
|
140
|
+
<SessionProvider
|
|
141
|
+
session={session}
|
|
142
|
+
refetchOnWindowFocus={false}
|
|
143
|
+
refetchInterval={0}
|
|
144
|
+
refetchWhenOffline={false}
|
|
145
|
+
>
|
|
146
|
+
<ModalProvider>{children}</ModalProvider>
|
|
147
|
+
</SessionProvider>
|
|
148
|
+
<ReactQueryDevtools initialIsOpen={false} />
|
|
149
|
+
</trpc.Provider>
|
|
150
|
+
</QueryClientProvider>
|
|
151
|
+
)
|
|
152
|
+
}
|
|
@@ -1,52 +1,49 @@
|
|
|
1
|
-
import type { CMSConfig } from 'nextjs-cms/core/config'
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
fallbackLanguage: 'en',
|
|
51
|
-
},
|
|
52
|
-
}
|
|
1
|
+
import type { CMSConfig } from 'nextjs-cms/core/config'
|
|
2
|
+
import process from 'process'
|
|
3
|
+
import { resolve } from 'path'
|
|
4
|
+
|
|
5
|
+
export const config: CMSConfig = {
|
|
6
|
+
ui: {
|
|
7
|
+
title: 'NEXTJS CMS',
|
|
8
|
+
defaultTheme: 'dark',
|
|
9
|
+
},
|
|
10
|
+
debug: true,
|
|
11
|
+
sections: {
|
|
12
|
+
path: resolve(process.cwd(), 'sections'),
|
|
13
|
+
strict: false,
|
|
14
|
+
category: {
|
|
15
|
+
allowRecursiveDelete: true,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
media: {
|
|
19
|
+
upload: {
|
|
20
|
+
path:
|
|
21
|
+
process.env.NODE_ENV === 'development'
|
|
22
|
+
? 'D:/Work/WebstormProjects/turbo-expo-next/apps/web/public/content/'
|
|
23
|
+
: '/home2/syriasell/public_html/assets/content',
|
|
24
|
+
preserveExtension: true,
|
|
25
|
+
},
|
|
26
|
+
images: {
|
|
27
|
+
thumbnail: {
|
|
28
|
+
width: 400,
|
|
29
|
+
height: 209,
|
|
30
|
+
crop: true,
|
|
31
|
+
quality: 80,
|
|
32
|
+
},
|
|
33
|
+
watermark: false,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
schemaGeneration: {
|
|
37
|
+
drizzle: {
|
|
38
|
+
enabled: true,
|
|
39
|
+
outDir: './dynamic-schemas',
|
|
40
|
+
fileName: 'schema.ts',
|
|
41
|
+
naming: {
|
|
42
|
+
tables: 'pascalCase',
|
|
43
|
+
columns: 'camelCase',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
fallbackLanguage: 'en',
|
|
48
|
+
},
|
|
49
|
+
}
|