Skip to content

Commit be2ebd0

Browse files
committed
TSJR-314 - bulk archive skills
1 parent aa29a02 commit be2ebd0

File tree

22 files changed

+406
-95
lines changed

22 files changed

+406
-95
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@import '@libs/ui/styles/includes';
2+
3+
.wrap {
4+
> * {
5+
margin-left: $sp-4;
6+
}
7+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { FC, useState } from 'react'
2+
import classNames from 'classnames'
3+
4+
import { Button } from '~/libs/ui'
5+
6+
import { SkillsManagerContextValue, useSkillsManagerContext } from '../../context'
7+
8+
import { ArchiveSkillsModal } from './archive-skills-modal'
9+
import styles from './BulkEditor.module.scss'
10+
11+
interface BulkEditorProps {
12+
className?: string
13+
}
14+
15+
const BulkEditor: FC<BulkEditorProps> = props => {
16+
const { bulkEditorCtx: context }: SkillsManagerContextValue = useSkillsManagerContext()
17+
const [showArchive, setShowArchive] = useState(false)
18+
19+
function toggleArchive(): void {
20+
setShowArchive(d => !d)
21+
}
22+
23+
const hasSelection = context.selectedSkills.length > 0
24+
25+
return (
26+
<div className={classNames(styles.wrap, props.className)}>
27+
<Button
28+
primary
29+
light
30+
label='Cancel'
31+
size='lg'
32+
onClick={function cancel() { context.toggle() }}
33+
/>
34+
<Button
35+
secondary
36+
variant='danger'
37+
label='Archive selected'
38+
size='lg'
39+
disabled={!hasSelection}
40+
onClick={toggleArchive}
41+
/>
42+
<Button
43+
primary
44+
variant='linkblue'
45+
label='Replace selected'
46+
size='lg'
47+
disabled={!hasSelection}
48+
/>
49+
<Button
50+
primary
51+
variant='linkblue'
52+
label='Move selected'
53+
size='lg'
54+
disabled={!hasSelection}
55+
/>
56+
57+
{showArchive && (
58+
<ArchiveSkillsModal skills={context.selectedSkills} onClose={toggleArchive} />
59+
)}
60+
</div>
61+
)
62+
}
63+
64+
export default BulkEditor
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@import '@libs/ui/styles/includes';
2+
3+
.modalBody {
4+
.skillsList {
5+
column-count: 2;
6+
}
7+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { FC } from 'react'
2+
3+
import { BaseModal, Button } from '~/libs/ui'
4+
5+
import { StandardizedSkill } from '../../../services'
6+
import { SkillsList } from '../../skills-list'
7+
import { SkillsManagerContextValue, useSkillsManagerContext } from '../../../context'
8+
9+
import styles from './ArchiveSkillsModal.module.scss'
10+
11+
interface ArchiveSkillsModalProps {
12+
skills: StandardizedSkill[]
13+
onClose: () => void
14+
}
15+
16+
const ArchiveSkillsModal: FC<ArchiveSkillsModalProps> = props => {
17+
const { bulkEditorCtx: context }: SkillsManagerContextValue = useSkillsManagerContext()
18+
19+
return (
20+
<BaseModal
21+
onClose={props.onClose}
22+
open
23+
size='lg'
24+
title='Archive Skills'
25+
bodyClassName={styles.modalBody}
26+
buttons={(
27+
<>
28+
<Button primary light label='Cancel' onClick={props.onClose} />
29+
<Button primary variant='danger' label='Archive' onClick={props.onClose} />
30+
</>
31+
)}
32+
>
33+
<SkillsList
34+
className={styles.skillsList}
35+
skills={props.skills}
36+
onSelect={context.toggleSkill}
37+
isSelected={context.isSkillSelected}
38+
editMode={!!context.isEditing}
39+
/>
40+
{/* <LoadingSpinner hide={!loading} overlay /> */}
41+
</BaseModal>
42+
)
43+
}
44+
45+
export default ArchiveSkillsModal
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as ArchiveSkillsModal } from './ArchiveSkillsModal'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as BulkEditor } from './BulkEditor'

src/apps/admin/src/skills-manager/components/categories-accordion/CategoriesAccordion.tsx

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
1616
setEditCategory,
1717
categories,
1818
groupedSkills,
19-
isBulkEditing,
20-
toggleEditMode,
21-
toggleEditSkill,
22-
isSkillSelected,
19+
bulkEditorCtx,
2320
}: SkillsManagerContextValue = useSkillsManagerContext()
2421

2522
function handleMenuActions(action: string, category: StandardizedSkillCategory): void {
@@ -28,7 +25,7 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
2825
setEditCategory(category)
2926
break
3027
case MENU_ACTIONS.bulkEditSkills.action:
31-
toggleEditMode(category)
28+
bulkEditorCtx.toggle(category)
3229
break
3330
default: break
3431
}
@@ -42,17 +39,17 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
4239
key={category.id}
4340
label={category.name}
4441
badgeCount={categorySkills.length}
45-
open={props.defaultOpen || !!isBulkEditing}
42+
open={props.defaultOpen || !!bulkEditorCtx.isEditing}
4643
menuActions={CATEGORY_ITEM_ACTIONS}
4744
onMenuAction={function handle(action: string) { handleMenuActions(action, category) }}
4845
>
4946
{() => (
5047
<SkillsList
5148
skills={categorySkills}
5249
key={`cat-${category.id}-list`}
53-
onSelect={toggleEditSkill}
54-
isSelected={isSkillSelected}
55-
editMode={!!isBulkEditing}
50+
onSelect={bulkEditorCtx.toggleSkill}
51+
isSelected={bulkEditorCtx.isSkillSelected}
52+
editMode={!!bulkEditorCtx.isEditing}
5653
/>
5754
)}
5855
</AccordionItem>
@@ -61,8 +58,8 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
6158

6259
return (
6360
<Accordion defaultOpen={props.defaultOpen}>
64-
{isBulkEditing ? (
65-
renderCategoryAccordion(isBulkEditing)
61+
{!!bulkEditorCtx.isEditing ? (
62+
renderCategoryAccordion(bulkEditorCtx.isEditing)
6663
) : (
6764
categories.map(renderCategoryAccordion)
6865
)}

src/apps/admin/src/skills-manager/components/more-actions-menu/MoreActionsMenu.module.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
&::before {
1010
content: '';
1111
display: block;
12-
height: calc(100% - 48px);
12+
height: 100%;
1313
}
1414
}
1515

src/apps/admin/src/skills-manager/components/more-actions-menu/MoreActionsMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Button, IconOutline } from '~/libs/ui'
55
import { GLOBAL_ACTIONS, MENU_ACTIONS } from '../../config'
66
import { ActionsMenu } from '../actions-menu'
77
import { StandardizedSkill, StandardizedSkillCategory } from '../../services'
8-
import { SkillsManagerContextValue, useSkillsManagerContext } from '../../context'
8+
import { SkillsManagerContextValue, useSkillsManagerContext } from '../../context/skills-manager.context'
99

1010
import styles from './MoreActionsMenu.module.scss'
1111

src/apps/admin/src/skills-manager/components/page-header/PageHeader.module.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@
77
.inner {
88
display: flex;
99
align-items: center;
10+
gap: $sp-8;
11+
12+
h1 {
13+
line-height: $sp-10;
14+
}
1015
}

0 commit comments

Comments
 (0)