@mirrormedia/lilith-draft-editor 1.0.0-beta → 1.0.0-beta4

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.
Files changed (171) hide show
  1. package/lib/draft-js/block-renderer/background-image-block.js +123 -0
  2. package/lib/draft-js/block-renderer/background-video-block.js +133 -0
  3. package/lib/draft-js/block-renderer/color-box-block.js +92 -0
  4. package/lib/draft-js/block-renderer/divider-block.js +24 -0
  5. package/lib/draft-js/block-renderer/embedded-code-block.js +63 -0
  6. package/lib/draft-js/block-renderer/image-block.js +47 -0
  7. package/lib/draft-js/block-renderer/info-box-block.js +89 -0
  8. package/lib/draft-js/block-renderer/media-block.js +65 -0
  9. package/lib/draft-js/block-renderer/related-post-block.js +51 -0
  10. package/lib/draft-js/block-renderer/side-index-block.js +103 -0
  11. package/lib/draft-js/block-renderer/slideshow-block.js +71 -0
  12. package/lib/draft-js/block-renderer/table-block.js +408 -0
  13. package/lib/draft-js/buttons/annotation.js +117 -0
  14. package/lib/draft-js/buttons/background-color.js +123 -0
  15. package/lib/draft-js/buttons/background-image.js +222 -0
  16. package/lib/draft-js/buttons/background-video.js +222 -0
  17. package/lib/draft-js/buttons/color-box.js +172 -0
  18. package/lib/draft-js/buttons/divider.js +63 -0
  19. package/lib/draft-js/buttons/embedded-code.js +109 -0
  20. package/lib/draft-js/buttons/enlarge.js +24 -0
  21. package/lib/draft-js/buttons/font-color.js +116 -0
  22. package/lib/draft-js/buttons/image.js +68 -0
  23. package/lib/draft-js/buttons/info-box.js +147 -0
  24. package/lib/draft-js/buttons/link.js +107 -0
  25. package/lib/draft-js/buttons/media.js +121 -0
  26. package/lib/draft-js/buttons/related-post.js +71 -0
  27. package/lib/draft-js/buttons/selector/align-selector.js +71 -0
  28. package/lib/draft-js/buttons/selector/image-selector.js +428 -0
  29. package/lib/draft-js/buttons/selector/pagination.js +82 -0
  30. package/lib/draft-js/buttons/selector/post-selector.js +317 -0
  31. package/lib/draft-js/buttons/selector/search-box.js +46 -0
  32. package/lib/draft-js/buttons/selector/video-selector.js +284 -0
  33. package/lib/draft-js/buttons/side-index.js +200 -0
  34. package/lib/draft-js/buttons/slideshow.js +71 -0
  35. package/lib/draft-js/buttons/table.js +67 -0
  36. package/lib/draft-js/buttons/text-align.js +88 -0
  37. package/lib/draft-js/editor/basic-editor.js +366 -0
  38. package/lib/draft-js/editor/block-renderer-fn.js +117 -0
  39. package/lib/draft-js/editor/entity-decorator.js +16 -0
  40. package/lib/draft-js/editor/modifier.js +68 -0
  41. package/lib/draft-js/entity-decorator/annotation-decorator.js +86 -0
  42. package/lib/draft-js/entity-decorator/link-decorator.js +39 -0
  43. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.js +91 -0
  44. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +91 -0
  45. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +84 -0
  46. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +84 -0
  47. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +90 -0
  48. package/lib/website/mirrormedia/custom/block-renderer/table-block.js +408 -0
  49. package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
  50. package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
  51. package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
  52. package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
  53. package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
  54. package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
  55. package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
  56. package/lib/website/mirrormedia/draft-editor/entity-decorator.js +18 -0
  57. package/lib/website/mirrormedia/draft-editor/index.js +799 -0
  58. package/lib/website/mirrormedia/index.js +1 -4
  59. package/lib/website/readr/custom/block-renderer/background-image-block.js +91 -0
  60. package/lib/website/readr/custom/block-renderer/background-video-block.js +91 -0
  61. package/lib/website/readr/custom/block-renderer/color-box-block.js +84 -0
  62. package/lib/website/readr/custom/block-renderer/info-box-block.js +84 -0
  63. package/lib/website/readr/custom/block-renderer/side-index-block.js +90 -0
  64. package/lib/website/readr/custom/block-renderer/table-block.js +408 -0
  65. package/lib/website/readr/custom/selector/align-selector.js +71 -0
  66. package/lib/website/readr/custom/selector/image-selector.js +427 -0
  67. package/lib/website/readr/custom/selector/pagination.js +82 -0
  68. package/lib/website/readr/custom/selector/post-selector.js +318 -0
  69. package/lib/website/readr/custom/selector/search-box.js +46 -0
  70. package/lib/website/readr/custom/selector/video-selector.js +282 -0
  71. package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
  72. package/lib/website/readr/draft-editor/entity-decorator.js +18 -0
  73. package/lib/website/readr/draft-editor/index.js +799 -0
  74. package/lib/website/readr/index.js +1 -4
  75. package/package.json +3 -2
  76. package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
  77. package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
  78. package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
  79. package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
  80. package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
  81. package/lib/draft-js/block-renderer/image-block.tsx +0 -41
  82. package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
  83. package/lib/draft-js/block-renderer/media-block.tsx +0 -36
  84. package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
  85. package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
  86. package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
  87. package/lib/draft-js/block-renderer/table-block.tsx +0 -488
  88. package/lib/draft-js/buttons/annotation.tsx +0 -113
  89. package/lib/draft-js/buttons/background-color.tsx +0 -125
  90. package/lib/draft-js/buttons/background-image.tsx +0 -276
  91. package/lib/draft-js/buttons/background-video.tsx +0 -275
  92. package/lib/draft-js/buttons/color-box.tsx +0 -207
  93. package/lib/draft-js/buttons/divider.tsx +0 -56
  94. package/lib/draft-js/buttons/embedded-code.tsx +0 -126
  95. package/lib/draft-js/buttons/enlarge.tsx +0 -11
  96. package/lib/draft-js/buttons/font-color.tsx +0 -113
  97. package/lib/draft-js/buttons/image.tsx +0 -71
  98. package/lib/draft-js/buttons/info-box.tsx +0 -170
  99. package/lib/draft-js/buttons/link.tsx +0 -103
  100. package/lib/draft-js/buttons/media.tsx +0 -120
  101. package/lib/draft-js/buttons/related-post.tsx +0 -81
  102. package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
  103. package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
  104. package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
  105. package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
  106. package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
  107. package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
  108. package/lib/draft-js/buttons/side-index.tsx +0 -257
  109. package/lib/draft-js/buttons/slideshow.tsx +0 -81
  110. package/lib/draft-js/buttons/table.tsx +0 -63
  111. package/lib/draft-js/buttons/text-align.tsx +0 -88
  112. package/lib/draft-js/editor/basic-editor.tsx +0 -384
  113. package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
  114. package/lib/draft-js/editor/entity-decorator.tsx +0 -7
  115. package/lib/draft-js/editor/modifier.tsx +0 -71
  116. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
  117. package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
  118. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
  119. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
  120. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
  121. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
  122. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
  123. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
  124. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
  125. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
  126. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
  127. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
  128. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
  129. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
  130. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
  131. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
  132. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
  133. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
  134. package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
  135. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
  136. package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
  137. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
  138. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
  139. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
  140. package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
  141. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
  142. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
  143. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
  144. package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
  145. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
  146. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
  147. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
  148. package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
  149. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
  150. package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
  151. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
  152. package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
  153. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
  154. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
  155. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
  156. package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
  157. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
  158. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
  159. package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
  160. package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
  161. package/lib/website/readr/custom/selector/pagination.tsx +0 -83
  162. package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
  163. package/lib/website/readr/custom/selector/search-box.tsx +0 -39
  164. package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
  165. package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
  166. package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
  167. package/lib/website/readr/draft-editor/index.tsx +0 -909
  168. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
  169. package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
  170. package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
  171. package/lib/website/readr/draft-renderer/index.tsx +0 -150
@@ -1,83 +0,0 @@
1
- import React from 'react'
2
- import styled from 'styled-components'
3
-
4
- const PaginationWrapper = styled.div`
5
- display: flex;
6
- justify-content: end;
7
- `
8
-
9
- const Arrows = styled.div`
10
- display: flex;
11
- `
12
-
13
- const ArrowButtonWrapper = styled.a`
14
- color: #415269;
15
- cursor: pointer;
16
- ${({ disable }) => {
17
- if (disable) {
18
- return `
19
- pointer-events: none;
20
- opacity: 0.65;
21
- cursor: unset;
22
- `
23
- }
24
- }}
25
- `
26
-
27
- export function Pagination({ currentPage, total, pageSize, onChange }) {
28
- const minPage = 1
29
- const limit = Math.ceil(total / pageSize)
30
- const nextPage = currentPage + 1
31
- const prevPage = currentPage - 1
32
-
33
- // Don't render the pagiantion component if the pageSize is greater than the total number of items in the list.
34
- if (total <= pageSize) return null
35
-
36
- return (
37
- <PaginationWrapper>
38
- <div>
39
- {currentPage} of {limit} pages
40
- </div>
41
- <Arrows>
42
- <ArrowButtonWrapper
43
- onClick={() => {
44
- onChange(prevPage)
45
- }}
46
- disable={prevPage < minPage}
47
- >
48
- <svg
49
- aria-hidden="true"
50
- focusable="false"
51
- height="24px"
52
- width="24px"
53
- role="img"
54
- viewBox="0 0 24 24"
55
- xmlns="http://www.w3.org/2000/svg"
56
- className="css-bztyua"
57
- >
58
- <polyline points="15 18 9 12 15 6"></polyline>{' '}
59
- </svg>
60
- </ArrowButtonWrapper>
61
- <ArrowButtonWrapper
62
- onClick={() => {
63
- onChange(nextPage)
64
- }}
65
- disable={nextPage > limit}
66
- >
67
- <svg
68
- aria-hidden="true"
69
- focusable="false"
70
- height="24px"
71
- width="24px"
72
- role="img"
73
- viewBox="0 0 24 24"
74
- xmlns="http://www.w3.org/2000/svg"
75
- className="css-bztyua"
76
- >
77
- <polyline points="9 18 15 12 9 6"></polyline>
78
- </svg>
79
- </ArrowButtonWrapper>
80
- </Arrows>
81
- </PaginationWrapper>
82
- )
83
- }
@@ -1,367 +0,0 @@
1
- import React, { useEffect, useState } from 'react'
2
- import styled from 'styled-components'
3
- import { Drawer, DrawerController } from '@keystone-ui/modals'
4
- import { gql, useLazyQuery } from '@keystone-6/core/admin-ui/apollo'
5
- import { ImageEntity } from './image-selector'
6
- import { SearchBox, SearchBoxOnChangeFn } from './search-box'
7
- import { Pagination } from './pagination'
8
-
9
- const postsQuery = gql`
10
- query Posts($searchText: String!, $take: Int, $skip: Int) {
11
- postsCount(where: { title: { contains: $searchText } })
12
- posts(
13
- where: { title: { contains: $searchText } }
14
- take: $take
15
- skip: $skip
16
- ) {
17
- id
18
- slug
19
- title
20
- subtitle
21
- heroImage {
22
- id
23
- name
24
- imageFile {
25
- url
26
- }
27
- resized {
28
- original
29
- }
30
- }
31
- og_image {
32
- id
33
- name
34
- imageFile {
35
- url
36
- }
37
- resized {
38
- original
39
- }
40
- }
41
- }
42
- }
43
- `
44
-
45
- const PostSearchBox = styled(SearchBox)`
46
- margin-top: 10px;
47
- `
48
-
49
- const PostSelectionWrapper = styled.div`
50
- overflow: auto;
51
- margin-top: 10px;
52
- `
53
-
54
- const PostGridsWrapper = styled.div`
55
- display: flex;
56
- flex-wrap: wrap;
57
- overflow: auto;
58
- `
59
-
60
- const PostGridWrapper = styled.div`
61
- flex: 0 0 33.3333%;
62
- cursor: pointer;
63
- padding: 0 10px 10px;
64
- `
65
-
66
- const PostMetaGridsWrapper = styled.div`
67
- display: flex;
68
- flex-wrap: wrap;
69
- overflow: auto;
70
- `
71
-
72
- const PostMetaGridWrapper = styled.div`
73
- flex: 0 0 33.3333%;
74
- cursor: pointer;
75
- padding: 0 10px 10px;
76
- `
77
-
78
- const Post = styled.div`
79
- width: 100%;
80
- `
81
-
82
- const SeparationLine = styled.div`
83
- border: #e1e5e9 1px solid;
84
- margin-top: 10px;
85
- margin-bottom: 10px;
86
- `
87
-
88
- const ErrorHint = styled.span`
89
- color: red;
90
- `
91
-
92
- const PostSelected = styled.div`
93
- height: 1.4rem;
94
- `
95
-
96
- const PostImage = styled.img`
97
- display: block;
98
- width: 100%;
99
- aspect-ratio: 2;
100
- object-fit: cover;
101
- `
102
-
103
- const PostTitle = styled.div`
104
- padding: 0 5px;
105
- `
106
-
107
- const ErrorWrapper = styled.div`
108
- & * {
109
- margin: 0;
110
- }
111
- `
112
-
113
- type ID = string
114
-
115
- export type PostEntity = {
116
- id: ID
117
- title: string
118
- slug: string
119
- heroImage: ImageEntity
120
- og_image: ImageEntity
121
- }
122
-
123
- export type PostEntityWithMeta = {
124
- post: PostEntity
125
- }
126
-
127
- type PostEntityOnSelectFn = (param: PostEntity) => void
128
-
129
- function PostGrids(props: {
130
- posts: PostEntity[]
131
- selected: PostEntity[]
132
- onSelect: PostEntityOnSelectFn
133
- }): React.ReactElement {
134
- const { posts, selected, onSelect } = props
135
-
136
- return (
137
- <PostGridsWrapper>
138
- {posts.map((post) => {
139
- return (
140
- <PostGrid
141
- key={post.id}
142
- isSelected={selected?.includes(post)}
143
- onSelect={() => onSelect(post)}
144
- post={post}
145
- />
146
- )
147
- })}
148
- </PostGridsWrapper>
149
- )
150
- }
151
-
152
- function PostGrid(props: {
153
- post: PostEntity
154
- isSelected: boolean
155
- onSelect: PostEntityOnSelectFn
156
- }) {
157
- const { post, onSelect, isSelected } = props
158
- return (
159
- <PostGridWrapper key={post?.id} onClick={() => onSelect(post)}>
160
- <PostSelected>
161
- {isSelected ? <i className="fas fa-check-circle"></i> : null}
162
- </PostSelected>
163
- <Post>
164
- <PostImage
165
- src={post.heroImage?.resized?.original}
166
- onError={(e) =>
167
- (e.currentTarget.src = post.heroImage?.imageFile?.url)
168
- }
169
- />
170
- <PostTitle>{post.title}</PostTitle>
171
- </Post>
172
- </PostGridWrapper>
173
- )
174
- }
175
-
176
- function PostMetaGrids(props: { postMetas: PostEntityWithMeta[] }) {
177
- const { postMetas } = props
178
- return (
179
- <PostMetaGridsWrapper>
180
- {postMetas.map((postMetas) => (
181
- <PostMetaGrid key={postMetas?.post?.id} postMeta={postMetas} />
182
- ))}
183
- </PostMetaGridsWrapper>
184
- )
185
- }
186
-
187
- function PostMetaGrid(props: {
188
- postMeta: PostEntityWithMeta
189
- }): React.ReactElement {
190
- const { postMeta } = props
191
- const { post } = postMeta
192
-
193
- return (
194
- <PostMetaGridWrapper>
195
- <Post>
196
- <PostImage
197
- src={post?.heroImage?.resized?.original}
198
- onError={(e) =>
199
- (e.currentTarget.src = post?.heroImage?.imageFile?.url)
200
- }
201
- />
202
- <PostTitle>{post?.name}</PostTitle>
203
- </Post>
204
- </PostMetaGridWrapper>
205
- )
206
- }
207
-
208
- type PostSelectorOnChangeFn = (params: PostEntityWithMeta[]) => void
209
-
210
- export function PostSelector(props: {
211
- onChange: PostSelectorOnChangeFn
212
- enableMultiSelect?: boolean
213
- minSelectCount?: number
214
- maxSelectCount?: number
215
- }) {
216
- const [
217
- queryPosts,
218
- { loading, error, data: { posts = [], postsCount = 0 } = {} },
219
- ] = useLazyQuery(postsQuery, { fetchPolicy: 'no-cache' })
220
- const [currentPage, setCurrentPage] = useState(0) // page starts with 1, 0 is used to detect initialization
221
- const [searchText, setSearchText] = useState('')
222
- const [selected, setSelected] = useState<PostEntityWithMeta[]>([])
223
- const [showErrorHint, setShowErrorHint] = useState(false)
224
-
225
- const pageSize = 6
226
-
227
- const {
228
- onChange,
229
- enableMultiSelect = false,
230
- minSelectCount = 1,
231
- maxSelectCount = 3,
232
- } = props
233
-
234
- const onSave = () => {
235
- if (
236
- enableMultiSelect &&
237
- minSelectCount &&
238
- selected.length < minSelectCount
239
- ) {
240
- setShowErrorHint(true)
241
- return
242
- }
243
-
244
- onChange(selected)
245
- }
246
-
247
- const onCancel = () => {
248
- onChange([])
249
- }
250
-
251
- const onSearchBoxChange: SearchBoxOnChangeFn = async (searchInput) => {
252
- setSearchText(searchInput)
253
- setCurrentPage(1)
254
- }
255
-
256
- const onPostsGridSelect: PostEntityOnSelectFn = (postEntity) => {
257
- setSelected((selected) => {
258
- const filterdSelected = selected.filter(
259
- (ele) => ele.post?.id !== postEntity.id
260
- )
261
-
262
- // deselect the post
263
- if (filterdSelected.length !== selected.length) {
264
- return filterdSelected
265
- }
266
-
267
- // add new selected one and check shrink the array if there is a limit
268
- if (enableMultiSelect) {
269
- let newSelected = selected.concat([{ post: postEntity }])
270
-
271
- if (maxSelectCount && newSelected.length >= maxSelectCount) {
272
- newSelected = newSelected.slice(-maxSelectCount)
273
- }
274
-
275
- return newSelected
276
- }
277
-
278
- // single select
279
- return [{ post: postEntity }]
280
- })
281
- }
282
-
283
- const selectedPosts = selected.map((ele: PostEntityWithMeta) => {
284
- return ele.post
285
- })
286
-
287
- useEffect(() => {
288
- if (currentPage !== 0) {
289
- queryPosts({
290
- variables: {
291
- searchText: searchText,
292
- skip: (currentPage - 1) * pageSize,
293
- take: pageSize,
294
- },
295
- })
296
- }
297
- }, [currentPage, searchText])
298
-
299
- let searchResult = (
300
- <React.Fragment>
301
- <PostGrids
302
- posts={posts}
303
- selected={selectedPosts}
304
- onSelect={onPostsGridSelect}
305
- />
306
- <Pagination
307
- currentPage={currentPage}
308
- total={postsCount}
309
- pageSize={pageSize}
310
- onChange={(pageIndex) => {
311
- setCurrentPage(pageIndex)
312
- }}
313
- />
314
- </React.Fragment>
315
- )
316
- if (loading) {
317
- searchResult = <p>searching...</p>
318
- }
319
- if (error) {
320
- searchResult = (
321
- <ErrorWrapper>
322
- <h3>Errors occurs in the `posts` query</h3>
323
- <div>
324
- <br />
325
- <b>Message:</b>
326
- <div>{error.message}</div>
327
- <br />
328
- <b>Stack:</b>
329
- <div>{error.stack}</div>
330
- <br />
331
- <b>Query:</b>
332
- <pre>{postsQuery.loc.source.body}</pre>
333
- </div>
334
- </ErrorWrapper>
335
- )
336
- }
337
-
338
- return (
339
- <DrawerController isOpen={true}>
340
- <Drawer
341
- title="Select post"
342
- actions={{
343
- cancel: {
344
- label: 'Cancel',
345
- action: onCancel,
346
- },
347
- confirm: {
348
- label: 'Confirm',
349
- action: onSave,
350
- },
351
- }}
352
- >
353
- <div>
354
- <PostSearchBox onChange={onSearchBoxChange} />
355
- <PostSelectionWrapper>
356
- <div>{searchResult} </div>
357
- {!!selected.length && <SeparationLine />}
358
- <PostMetaGrids postMetas={selected} />
359
- {showErrorHint && (
360
- <ErrorHint>請至少選擇{minSelectCount}則文章</ErrorHint>
361
- )}
362
- </PostSelectionWrapper>
363
- </div>
364
- </Drawer>
365
- </DrawerController>
366
- )
367
- }
@@ -1,39 +0,0 @@
1
- import React, { useState } from 'react'
2
- import styled from 'styled-components'
3
- import { Button } from '@keystone-ui/button'
4
- import { TextInput } from '@keystone-ui/fields'
5
-
6
- const SearchBoxWrapper = styled.div`
7
- display: flex;
8
- `
9
-
10
- export type SearchBoxOnChangeFn = (param: string) => void
11
-
12
- export function SearchBox(props: {
13
- onChange: SearchBoxOnChangeFn
14
- className: string
15
- }): React.ReactElement {
16
- const { onChange, className } = props
17
- const [searchInput, setSearchInput] = useState('')
18
-
19
- return (
20
- <SearchBoxWrapper className={className}>
21
- <TextInput
22
- type="text"
23
- placeholder="請輸入關鍵字搜尋"
24
- value={searchInput}
25
- onChange={(e) => {
26
- setSearchInput(e.target.value)
27
- }}
28
- ></TextInput>
29
-
30
- <Button
31
- onClick={() => {
32
- onChange(searchInput)
33
- }}
34
- >
35
- Search
36
- </Button>
37
- </SearchBoxWrapper>
38
- )
39
- }