Skip to content

Commit 0d8e64f

Browse files
committed
TSJR-314 - improvments to bulk editor
1 parent 077f6e6 commit 0d8e64f

File tree

7 files changed

+46
-9
lines changed

7 files changed

+46
-9
lines changed

src/apps/admin/src/skills-manager/components/bulk-editor/BulkEditor.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const BulkEditor: FC<BulkEditorProps> = props => {
4242
function closeMoveSkillsModal(moved?: boolean): void {
4343
if (moved) {
4444
refetchSkills()
45+
context.toggleAll()
4546
}
4647

4748
setShowMoveSkills(false)

src/apps/admin/src/skills-manager/components/bulk-editor/move-skills-modal/MoveSkillsModal.module.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
.skillsList {
55
column-count: 2;
66
margin: -$sp-2;
7+
margin-bottom: $sp-3;
78
}
89
}
910

1011
.formInput {
1112
&Label {
12-
margin-bottom: $sp-2;
13+
margin-bottom: $sp-1;
1314
}
1415
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FC, useCallback, useMemo } from 'react'
33
import { Accordion, AccordionItem } from '../accordion'
44
import { SkillsList } from '../skills-list'
55
import { SkillsManagerContextValue, useSkillsManagerContext } from '../../context'
6-
import { StandardizedSkillCategory } from '../../services'
6+
import { StandardizedSkill, StandardizedSkillCategory } from '../../services'
77
import { CATEGORY_ITEM_ACTIONS, MENU_ACTIONS } from '../../config'
88

99
interface CategoriesAccordionProps {
@@ -32,6 +32,10 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
3232
}
3333
}, [bulkEditorCtx, setEditCategory])
3434

35+
const handleBulkEditClick = useCallback((skill: StandardizedSkill) => {
36+
bulkEditorCtx.toggle(skill.category)
37+
}, [bulkEditorCtx])
38+
3539
const renderCategoryAccordion = useCallback((category: StandardizedSkillCategory): JSX.Element => {
3640
const categorySkills = groupedSkills[category.id] ?? []
3741

@@ -52,6 +56,7 @@ const CategoriesAccordion: FC<CategoriesAccordionProps> = props => {
5256
isSelected={bulkEditorCtx.isSkillSelected}
5357
editMode={!!bulkEditorCtx.isEditing}
5458
onEditSkill={setEditSkill}
59+
onBulkEditSkill={handleBulkEditClick}
5560
/>
5661
)}
5762
</AccordionItem>

src/apps/admin/src/skills-manager/components/skills-list/SkillsList.module.scss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,13 @@
2727
// pointer-events: none;
2828
}
2929
}
30+
31+
.checkbox {
32+
> * {
33+
margin: -$sp-2;
34+
> * {
35+
display: block;
36+
padding: $sp-2;
37+
}
38+
}
39+
}

src/apps/admin/src/skills-manager/components/skills-list/SkillsList.tsx

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FC } from 'react'
1+
import { FC, MouseEvent } from 'react'
22
import classNames from 'classnames'
33

44
import { InputCheckbox } from '~/libs/ui'
@@ -15,15 +15,34 @@ interface SkillsListProps {
1515
onSelect: (skill: StandardizedSkill) => void
1616
isSelected: (skill: StandardizedSkill) => boolean
1717
onEditSkill?: (skill: StandardizedSkill) => void
18+
onBulkEditSkill?: (skill: StandardizedSkill) => void
1819
}
1920

2021
const SkillsList: FC<SkillsListProps> = props => {
21-
function handleToggle(skill: StandardizedSkill): void {
22-
if (!props.editMode) {
23-
props.onEditSkill?.(skill)
22+
const handleSkillItemClick = (skill: StandardizedSkill) => (ev: MouseEvent) => {
23+
// prevent when clicking the checkbox
24+
const targetEl = ev.target as HTMLInputElement
25+
if (targetEl.nodeName === 'INPUT' && targetEl.type?.toLowerCase() === 'checkbox') {
2426
return
2527
}
2628

29+
// trigger bulk edit when holding ctrl key and bulk editor is not active
30+
if (ev.ctrlKey && !props.editMode && props.onBulkEditSkill) {
31+
props.onBulkEditSkill(skill)
32+
setTimeout(props.onSelect, 100, skill)
33+
return
34+
}
35+
36+
// toggle skill selection when holding ctrl key (rather than triggering skill edit)
37+
if (ev.ctrlKey) {
38+
props.onSelect(skill)
39+
return
40+
}
41+
42+
props.onEditSkill?.(skill)
43+
}
44+
45+
const handleCheckboxToggle = (skill: StandardizedSkill) => () => {
2746
props.onSelect(skill)
2847
}
2948

@@ -34,15 +53,15 @@ const SkillsList: FC<SkillsListProps> = props => {
3453
<li
3554
className={classNames(styles.skillItem, isSkillArchived(skill) && styles.archived)}
3655
key={skill.id}
37-
onClick={function toggl() { handleToggle(skill) }}
56+
onClick={handleSkillItemClick(skill)}
3857
>
3958
{props.editMode && (
4059
<div className={styles.checkbox}>
4160
<InputCheckbox
4261
name='toggle-skill'
4362
accent='blue'
4463
checked={props.isSelected(skill)}
45-
onChange={function toggl() { handleToggle(skill) }}
64+
onChange={handleCheckboxToggle(skill)}
4665
/>
4766
</div>
4867
)}

src/apps/admin/src/skills-manager/services/skills.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export const bulkUpdateStandardizedSkills = (
5959

6060
return xhrPutAsync(
6161
url,
62-
pick({ ...skill, ...updates }, 'name', 'description', 'categoryId', 'deleted_at'),
62+
pick({ ...skill, ...updates }, 'name', 'description', 'categoryId'),
6363
) as Promise<StandardizedSkill>
6464
})
6565

src/libs/ui/lib/components/form/form-groups/form-input/input-checkbox/InputCheckbox.module.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
position: relative;
2020
line-height: 1;
2121
vertical-align: middle;
22+
z-index: 1;
2223

2324
:global(.rc-checkbox-input) {
2425
position: absolute;

0 commit comments

Comments
 (0)