Skip to content

Commit 2bde4a5

Browse files
committed
Add Chip Component
1 parent ef07145 commit 2bde4a5

File tree

8 files changed

+142
-31
lines changed

8 files changed

+142
-31
lines changed

src/components/Chip/index.tsx

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React from 'react';
2+
import { _cs } from '@togglecorp/fujs';
3+
4+
import styles from './styles.module.css';
5+
6+
export type ChipVariant = 'default' | 'primary' |'success'| 'danger' | 'warning';
7+
8+
const chipVariantToClassNameMap: Record<ChipVariant, string> = {
9+
default: styles.default,
10+
primary: styles.primary,
11+
success: styles.success,
12+
danger: styles.danger,
13+
warning: styles.warning,
14+
};
15+
export interface Props {
16+
className?: string;
17+
label: React.ReactNode;
18+
variant?: ChipVariant;
19+
}
20+
21+
function Chip(props: Props) {
22+
const {
23+
className,
24+
label,
25+
variant = 'primary',
26+
} = props;
27+
28+
return (
29+
<div className={_cs(
30+
styles.chip,
31+
chipVariantToClassNameMap[variant],
32+
className,
33+
)}
34+
>
35+
<span className={styles.label}>
36+
{label}
37+
</span>
38+
39+
</div>
40+
);
41+
}
42+
43+
export default Chip;

src/components/Chip/styles.module.css

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
.chip {
2+
--color-border: transparent;
3+
--color-text: inherit;
4+
--color-background: transparent;
5+
--border-radius: var(--cms-ui-border-radius-full);
6+
--padding: var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-sm);
7+
8+
display: flex;
9+
align-items: center;
10+
border: var(--cms-ui-width-separator-sm) solid var(--color-border);
11+
border-radius: var(--border-radius);
12+
background-color: var(--color-background);
13+
padding: var(--padding);
14+
color: var(--color-text);
15+
gap: var(--cms-ui-spacing-xs);
16+
17+
&.default {
18+
--color-border: var(--cms-ui-color-background);
19+
--color-background: var(--cms-ui-color-background);
20+
}
21+
&.primary {
22+
--color-border: var(--cms-ui-color-blue-200);
23+
--color-background: var(--cms-ui-color-blue-200);
24+
--color-text: var(--cms-ui-color-blue-700);
25+
}
26+
27+
&.success {
28+
--color-background: var(--cms-ui-color-green-200);
29+
}
30+
31+
&.warning {
32+
--color-border: var(--cms-ui-color-yellow-100);
33+
--color-background: var(--cms-ui-color-yellow-100);
34+
--color-text: var(--cms-ui-color-yellow-550);
35+
}
36+
&.danger {
37+
--color-background: var( --cms-ui-color-red-50);
38+
--color-text: var(--cms-ui-color-red-90);
39+
}
40+
41+
.label {
42+
display: flex;
43+
align-items: center;
44+
flex-grow: 1;
45+
padding: var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-2xs) var(--cms-ui-spacing-sm);
46+
}
47+
}

src/configs/apollo.ts

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ const uploadLink = createUploadLink({
1818
uri: GRAPHQL_ENDPOINT,
1919
credentials: 'include',
2020
});
21-
2221
const link: ApolloLink = ApolloLink.from([
2322
ApolloLink.split(
2423
(operation) => operation.getContext().hasUpload,

src/index.css

+10
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@
8787
--cms-ui-color-green-600: #37AD00;
8888

8989
--cms-ui-color-red-600: #FF0000;
90+
91+
--cms-ui-color-red-10: #FDD6D9;
92+
--cms-ui-color-red-20: #FCC2C5;
93+
--cms-ui-color-red-30: #FBADB2;
94+
--cms-ui-color-red-40: #FA999F;
95+
--cms-ui-color-red-50: #F9858C;
96+
--cms-ui-color-red-60: #F87079;
97+
--cms-ui-color-red-70: #F75C65;
98+
--cms-ui-color-red-80: #F64752;
99+
--cms-ui-color-red-90: #F5333F;
90100

91101
--cms-ui-color-white-card: #FFFFFF;
92102
--cms-ui-color-white: #FDFDFD;

src/views/ContentManagement/index.tsx

+33-15
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import {
55
} from '@apollo/client';
66
import {
77
Button,
8-
Chip,
98
createDateColumn,
109
createStringColumn,
1110
Pager,
1211
Table,
1312
} from '@togglecorp/toggle-ui';
1413

14+
import Chip, { ChipVariant } from '#components/Chip';
1515
import Container from '#components/Container';
1616
import { createElementColumn } from '#components/CreateElementColumn';
1717
import {
@@ -26,11 +26,11 @@ import ContentActions from './ContentActions';
2626

2727
import styles from './styles.module.css';
2828

29-
type ContentListTable = NonNullable<NonNullable<NonNullable<ContentListQuery['private']>['contents']>['items']>[number];
29+
type ContentListTable = NonNullable<NonNullable<NonNullable<ContentListQuery['private']>['contents']>['items']>[number]& {serialNumber: string; };
3030

3131
const contentKeySelector = (option: ContentListTable) => option.id;
3232

33-
const PAGE_SIZE = 2;
33+
const PAGE_SIZE = 10;
3434

3535
const CREATE_CONTENT_QUERY = gql`
3636
query ContentList(
@@ -71,7 +71,7 @@ const CONTENT_ENUMS = gql`
7171

7272
const statusVariant: Record<string, string> = {
7373
Pending: 'default',
74-
'Text extracted': 'default',
74+
'Text extracted': 'primary',
7575
'Added to vector': 'success',
7676
'Deleted from vector': 'warning',
7777
Failure: 'danger',
@@ -86,16 +86,24 @@ export function Component() {
8686
createdAtGte?: string;
8787
createdAtLte?: string;
8888
documentType?: string;
89-
documentStatus?: string ;
89+
documentStatus?: string;
9090
}>({
9191
pageSize: PAGE_SIZE,
9292
filter: {},
9393
});
94-
9594
const {
9695
data: contentResult,
9796
} = useQuery<ContentListQuery, ContentListQueryVariables>(
9897
CREATE_CONTENT_QUERY,
98+
{
99+
variables: {
100+
pagination: {
101+
limit: 10,
102+
offset: (page - 1) * PAGE_SIZE,
103+
},
104+
105+
},
106+
},
99107
);
100108

101109
const {
@@ -108,7 +116,17 @@ export function Component() {
108116

109117
const documentStatus = contentEnumsResponse?.enums.ContentDocumentStatus;
110118

119+
const data = contentResult?.private.contents.items?.map((user, index) => ({
120+
...user,
121+
serialNumber: (page - 1) * PAGE_SIZE + index + 1,
122+
})) as unknown as ContentListTable[];
123+
111124
const columns = useMemo(() => ([
125+
createStringColumn<ContentListTable, string>(
126+
'sn',
127+
'S.N',
128+
(item) => String(item.serialNumber),
129+
),
112130
createStringColumn<ContentListTable, string>(
113131
'title',
114132
'Title',
@@ -125,8 +143,9 @@ export function Component() {
125143
'documentTypeDisplay',
126144
'File Type',
127145
(item) => documentType?.find(
128-
(type) => type.key === item.documentType,
146+
(type: { key: string; }) => type.key === item.documentType,
129147
)?.label,
148+
{ columnClassName: styles.actions },
130149
),
131150
createStringColumn<ContentListTable, string>(
132151
'tag',
@@ -138,15 +157,16 @@ export function Component() {
138157
{ status: string | undefined; variant: string }>(
139158
'documentStatusDisplay',
140159
'Status',
141-
({ status }) => (
160+
({ status, variant }) => (
142161
<Chip
143162
className={styles.status}
144163
label={status}
164+
variant={variant as ChipVariant}
145165
/>
146166
),
147167
(_key, item) => {
148168
const statusLabel = documentStatus?.find(
149-
(status) => status.key === item.documentStatus,
169+
(status: { key: string; }) => status.key === item.documentStatus,
150170
)?.label;
151171
const variant = statusLabel ? statusVariant[statusLabel] : '';
152172
return {
@@ -156,7 +176,7 @@ export function Component() {
156176
},
157177
{ columnClassName: styles.actions },
158178
),
159-
createElementColumn<ContentListTable, string, { id: number }>(
179+
createElementColumn<ContentListTable, string, { id: number}>(
160180
'actions',
161181
'Actions',
162182
ContentActions,
@@ -167,8 +187,6 @@ export function Component() {
167187
),
168188
]), [documentType, documentStatus]);
169189

170-
const data = contentResult?.private.contents;
171-
172190
return (
173191
<Container
174192
className={styles.container}
@@ -178,7 +196,7 @@ export function Component() {
178196
<Button
179197
name="Add Content"
180198
variant="primary"
181-
onClick={() => {}}
199+
onClick={() => { }}
182200
disabled
183201
>
184202
Add
@@ -189,7 +207,7 @@ export function Component() {
189207
infoHidden
190208
itemsPerPageControlHidden
191209
activePage={page}
192-
itemsCount={data?.count ?? 0}
210+
itemsCount={contentResult?.private?.contents?.count ?? 0}
193211
maxItemsPerPage={PAGE_SIZE}
194212
onActivePageChange={setPage}
195213
/>
@@ -199,7 +217,7 @@ export function Component() {
199217
className={styles.table}
200218
headerCellClassName={styles.headerCell}
201219
headerRowClassName={styles.headerRow}
202-
data={data?.items}
220+
data={data}
203221
columns={columns}
204222
keySelector={contentKeySelector}
205223
/>

src/views/ContentManagement/styles.module.css

-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
.table {
55
background-color: var(--cms-ui-color-white-card);
6-
overflow: auto;
76
.header-row {
87
.header-cell {
98
background-color: var(--cms-ui-color-blue-100);
@@ -15,10 +14,5 @@
1514
.actions{
1615
min-width:14rem;
1716
}
18-
.status{
19-
background-color: var(--cms-ui-color-background);
20-
color: var(--cms-ui-primary-text-color);
21-
font-weight: var(--cms-ui-font-weight-medium);
22-
}
2317
}
2418
}

src/views/UserManagement/index.tsx

+4-5
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import {
1313
} from '@apollo/client';
1414
import {
1515
Button,
16-
Chip,
1716
createStringColumn,
1817
Pager,
1918
SelectInput,
2019
Table,
2120
TextInput,
2221
} from '@togglecorp/toggle-ui';
2322

23+
import Chip from '#components/Chip';
2424
import Container from '#components/Container';
2525
import { createElementColumn } from '#components/CreateElementColumn';
2626
import {
@@ -201,10 +201,9 @@ export function Component() {
201201
<>
202202
<Chip
203203
className={styles.userCount}
204-
>
205-
{userResult?.private?.users?.count}
206-
Users
207-
</Chip>
204+
variant="default"
205+
label={`${userResult?.private?.users?.count} users`}
206+
/>
208207
<Button
209208
name="Add User"
210209
variant="primary"

src/views/UserManagement/styles.module.css

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
.container {
22
padding: var(--cms-ui-spacing-lg) var(--cms-ui-spacing-md);
33

4+
.user-count{
5+
font-weight: var(--cms-ui-font-weight-bold)
6+
}
7+
48
.actions{
59
display:flex;
610
gap: var(--cms-ui-spacing-md);
7-
8-
.user-count{
9-
background-color :var(--cms-ui-color-background);
10-
}
1111
}
12+
1213
.table {
1314
background-color: var(--cms-ui-color-white-card);
1415
.header-row {

0 commit comments

Comments
 (0)