@dcrackel/hematournamentui 1.0.711 → 1.0.713
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/.prettierignore +7 -7
- package/.storybook/main.js +3 -1
- package/README.md +182 -148
- package/dist/HemaTournamentUI-lib.es.js +4150 -4039
- package/dist/HemaTournamentUI-lib.umd.js +27 -27
- package/dist/hematournamentui-tailwind.css +11 -0
- package/package.json +96 -96
- package/prettier.config.js +16 -16
- package/src/main.js +1 -1
- package/src/mocks/getDEBouts-TableOf128.js +37 -37
- package/src/mocks/getDEBouts-TableOf64.js +35 -35
- package/src/stories/Atoms/Input/BaseInput.test.js +97 -97
- package/src/stories/Atoms/Input/BaseInput.vue +149 -149
- package/src/stories/Molecules/Indicators/MissingHemaRatingsId/MissingHemaRatingsId.stories.js +23 -23
- package/src/stories/Molecules/Indicators/MissingHemaRatingsId/MissingHemaRatingsId.vue +35 -35
- package/src/stories/Molecules/Indicators/RegistrationStatus/RegistrationStatus.vue +30 -0
- package/src/stories/Molecules/Menus/HoverActions/HoverActions.test.js +138 -0
- package/src/stories/Molecules/Menus/HoverActions/HoverActions.vue +212 -0
- package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.stories.js +6 -0
- package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.test.js +18 -18
- package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.vue +1 -1
- package/src/stories/Organisms/Cards/BoutCard/BoutCard.vue +5 -1
- package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardActive/BoutCardActive.vue +19 -10
- package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardInactive/BoutCardInactive.vue +11 -7
- package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.stories.js +33 -33
- package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.test.js +45 -45
- package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.vue +103 -103
- package/src/stories/Organisms/Cards/Director/DirectorCard.test.js +82 -0
- package/src/stories/Organisms/Cards/Director/DirectorCard.vue +32 -51
- package/src/stories/Organisms/Cards/EditBout/EditBout.test.js +51 -51
- package/src/stories/Organisms/Cards/EventCard/EventCard.stories.js +41 -1
- package/src/stories/Organisms/Cards/EventCard/EventCard.test.js +106 -0
- package/src/stories/Organisms/Cards/EventCard/EventCard.vue +62 -30
- package/src/stories/Organisms/Cards/FencerCard/FencerCard.vue +298 -298
- package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.stories.js +77 -60
- package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.test.js +144 -143
- package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.vue +289 -256
- package/src/stories/Organisms/Cards/TableauFencerCard/TableauFencerCard.stories.js +69 -69
- package/src/stories/Organisms/Cards/TableauFencerCard/TableauFencerCard.vue +80 -80
- package/src/stories/Organisms/Cards/WaitlistFencerCard/WaitlistFencerCard.vue +153 -153
- package/src/stories/Organisms/ComplexInputs/DropDown/DropDownMenu.vue +4 -0
- package/src/stories/Organisms/ComplexInputs/ImageCropper/ImageCropper.stories.js +31 -31
- package/src/stories/Organisms/ComplexInputs/ImageCropper/ImageCropper.test.js +109 -109
- package/src/stories/Organisms/ComplexInputs/ImageCropper/ImageCropper.vue +192 -192
- package/src/stories/Organisms/Containers/Tableau/Tableau.stories.js +1 -0
- package/src/stories/Organisms/Containers/Tableau/Tableau.test.js +247 -204
- package/src/stories/Organisms/Containers/Tableau/Tableau.vue +89 -15
- package/src/stories/Organisms/Containers/Tableau/components/BracketDirectorAssignmentPanel.test.js +29 -29
- package/src/stories/Organisms/Containers/Tableau/components/BracketDirectorAssignmentPanel.vue +46 -46
- package/src/stories/Organisms/Containers/Tableau/components/TableauSvgOverlay.test.js +21 -21
- package/src/stories/Organisms/Containers/Tableau/components/TableauSvgOverlay.vue +39 -39
- package/src/stories/Organisms/Containers/Tableau/layout/TableauLayoutEngine.js +145 -145
- package/src/stories/Organisms/Containers/Tableau/layout/TableauLayoutEngine.test.js +64 -64
- package/src/stories/Organisms/Containers/Tableau/plannedAssignments.js +36 -57
- package/src/stories/Organisms/Containers/Tableau/plannedAssignments.test.js +101 -65
- package/src/stories/Organisms/Containers/TableauColumn/TableauColumn.vue +14 -1
- package/src/stories/Organisms/Headers/AttendanceSummary/AttendanceSummary.vue +12 -5
- package/src/stories/Organisms/Wizards/EditEventWizard/BasicEventInfo/BasicEventInfo.stories.js +52 -48
- package/src/stories/Organisms/Wizards/EditEventWizard/BasicEventInfo/BasicEventInfo.vue +256 -227
- package/src/stories/Organisms/Wizards/EditEventWizard/DirectElimination/DirectElimination.vue +226 -226
- package/src/stories/Organisms/Wizards/EditEventWizard/DirectEliminationPromotion/DirectEliminationPromotion.vue +204 -204
- package/src/stories/Organisms/Wizards/EditEventWizard/EditEventWizard.stories.js +137 -133
- package/src/stories/Organisms/Wizards/EditEventWizard/EditEventWizard.test.js +221 -191
- package/src/stories/Organisms/Wizards/EditEventWizard/EditEventWizard.vue +372 -366
- package/src/stories/Organisms/Wizards/EditEventWizard/EventCustomization/EventCustomization.vue +172 -172
- package/src/stories/Organisms/Wizards/EditEventWizard/PoolConfiguration/PoolConfiguration.vue +216 -216
- package/src/stories/Organisms/Wizards/EditEventWizard/PriceFields.test.js +79 -79
- package/src/stories/Organisms/Wizards/EditEventWizard/RuleSerialization.test.js +29 -0
- package/src/stories/Organisms/Wizards/EditEventWizard/WeaponSelection.test.js +138 -0
- package/src/stories/Templates/EventManagement/Bracket/Bracket.stories.js +123 -12
- package/src/stories/Templates/EventManagement/Bracket/Bracket.test.js +178 -166
- package/src/stories/Templates/EventManagement/Bracket/Bracket.vue +35 -7
- package/src/stories/Templates/EventManagement/Bracket/BracketDirectorAssignment.test.js +242 -0
- package/src/stories/Templates/EventManagement/Bracket/BracketMobile.test.js +131 -0
- package/src/stories/Templates/EventManagement/Bracket/BracketPlannedSuggestions.js +42 -39
- package/src/stories/Templates/EventManagement/Bracket/BracketStories.test.js +80 -0
- package/src/stories/Templates/EventManagement/Bracket/BracketStoryAssignments.js +93 -0
- package/src/stories/Templates/EventManagement/Bracket/BracketStoryAssignments.test.js +152 -0
- package/src/stories/Templates/EventManagement/Bracket/BracketStoryHarness.js +39 -39
- package/src/stories/Templates/EventManagement/Bracket/BracketStoryHarness.test.js +79 -79
- package/src/stories/Templates/EventManagement/EditEventInfo/EditEventInfo.stories.js +93 -93
- package/src/stories/Templates/EventManagement/EditEventInfo/EditEventInfo.vue +91 -91
- package/src/stories/Templates/EventManagement/EventAttendance/EventAttendance.stories.js +31 -1
- package/src/stories/Templates/EventManagement/PoolLive/PoolLive.test.js +121 -121
- package/src/stories/Templates/Menus/EditEventsTopMenu/EditEventsTopMenu.stories.js +9 -2
- package/src/stories/Templates/Menus/EditEventsTopMenu/EditEventsTopMenu.vue +5 -4
- package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.stories.js +81 -81
- package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.test.js +39 -39
- package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.vue +101 -101
- package/src/stories/Templates/PersonManagement/Admin/FencerAdmin/FencerAdmin.stories.js +71 -71
- package/src/stories/Templates/PersonManagement/Admin/FencerAdmin/FencerAdmin.vue +86 -86
- package/src/stories/Templates/PersonManagement/Admin/MergeAccounts/MergeAccounts.stories.js +86 -86
- package/src/stories/Templates/PersonManagement/Admin/MergeAccounts/MergeAccounts.vue +247 -247
- package/src/stories/Templates/PersonManagement/Basic/BasicEdit.vue +170 -170
- package/src/stories/Templates/PersonManagement/PersonManagement.stories.js +156 -156
- package/src/stories/Templates/PersonManagement/PersonManagement.test.js +329 -329
- package/src/stories/Templates/PersonManagement/PersonManagement.vue +329 -329
- package/src/stories/Templates/PersonManagement/PersonManagementDraft.js +42 -42
- package/src/stories/Templates/TournamentManagement/ListEvents/ListEvents.stories.js +58 -45
- package/src/stories/Templates/TournamentManagement/TournamentManagement.stories.js +84 -84
- package/src/stories/Templates/TournamentManagement/TournamentManagement.test.js +114 -114
- package/src/stories/Templates/TournamentManagement/TournamentManagement.vue +363 -363
- package/src/stories/Templates/TournamentManagement/TournamentPageOne/TournamentPageOne.stories.js +116 -116
- package/src/stories/Templates/TournamentManagement/TournamentPageOne/TournamentPageOne.vue +307 -307
- package/src/stories/Util/Validations/PersonManagementValidations.js +45 -45
- package/src/stories/Util/Validations/PriceValidation.js +6 -6
- package/src/stories/Util/boutDirectorAssignment.js +46 -0
- package/src/stories/Util/registrationStatus.js +11 -0
- package/src/stories/Util/tabs.js +19 -47
package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.stories.js
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import Administration from './Administration.vue';
|
|
2
|
-
import personsMock from '../../../../../mocks/personsMock.js';
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
title: 'Templates/PersonManagement/Admin/Administration',
|
|
6
|
-
component: Administration,
|
|
7
|
-
tags: ['autodocs'],
|
|
8
|
-
args: {
|
|
9
|
-
person: personsMock[1],
|
|
10
|
-
userLevel: 'Club'
|
|
11
|
-
},
|
|
12
|
-
argTypes: {
|
|
13
|
-
person: { control: { type: 'object' } },
|
|
14
|
-
userLevel: {
|
|
15
|
-
control: { type: 'select' },
|
|
16
|
-
options: ['User', 'Director', 'Club', 'Admin']
|
|
17
|
-
},
|
|
18
|
-
'update:person': { action: 'update:person' }
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const Default = {
|
|
23
|
-
args: {
|
|
24
|
-
person: personsMock[1],
|
|
25
|
-
userLevel: 'Club'
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const AdminCanSelectAdminAccess = {
|
|
30
|
-
args: {
|
|
31
|
-
person: {
|
|
32
|
-
...personsMock[1],
|
|
33
|
-
AccessLevel: 'Admin'
|
|
34
|
-
},
|
|
35
|
-
userLevel: 'Admin'
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export const AdminEditingUserAccess = {
|
|
40
|
-
args: {
|
|
41
|
-
person: {
|
|
42
|
-
...personsMock[1],
|
|
43
|
-
AccessLevel: 'User'
|
|
44
|
-
},
|
|
45
|
-
userLevel: 'Admin'
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export const WithoutHemaRating = {
|
|
50
|
-
args: {
|
|
51
|
-
person: {
|
|
52
|
-
...personsMock[1],
|
|
53
|
-
HemaRatingsId: ''
|
|
54
|
-
},
|
|
55
|
-
userLevel: 'Club'
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export const EmptyAccessLevel = {
|
|
60
|
-
args: {
|
|
61
|
-
person: {
|
|
62
|
-
...personsMock[1],
|
|
63
|
-
AccessLevel: ''
|
|
64
|
-
},
|
|
65
|
-
userLevel: 'Club'
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export const ClearedHemaRatingId = {
|
|
70
|
-
args: {
|
|
71
|
-
person: { ...personsMock[1], HemaRatingsId: null, HEMARatings: [{ HemaRatingId: 123 }] },
|
|
72
|
-
userLevel: 'Admin'
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
export const InvalidHemaRatingId = {
|
|
77
|
-
args: {
|
|
78
|
-
person: { ...personsMock[1], HemaRatingsId: '1.5' },
|
|
79
|
-
userLevel: 'Admin'
|
|
80
|
-
}
|
|
81
|
-
};
|
|
1
|
+
import Administration from './Administration.vue';
|
|
2
|
+
import personsMock from '../../../../../mocks/personsMock.js';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Templates/PersonManagement/Admin/Administration',
|
|
6
|
+
component: Administration,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
args: {
|
|
9
|
+
person: personsMock[1],
|
|
10
|
+
userLevel: 'Club'
|
|
11
|
+
},
|
|
12
|
+
argTypes: {
|
|
13
|
+
person: { control: { type: 'object' } },
|
|
14
|
+
userLevel: {
|
|
15
|
+
control: { type: 'select' },
|
|
16
|
+
options: ['User', 'Director', 'Club', 'Admin']
|
|
17
|
+
},
|
|
18
|
+
'update:person': { action: 'update:person' }
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const Default = {
|
|
23
|
+
args: {
|
|
24
|
+
person: personsMock[1],
|
|
25
|
+
userLevel: 'Club'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const AdminCanSelectAdminAccess = {
|
|
30
|
+
args: {
|
|
31
|
+
person: {
|
|
32
|
+
...personsMock[1],
|
|
33
|
+
AccessLevel: 'Admin'
|
|
34
|
+
},
|
|
35
|
+
userLevel: 'Admin'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const AdminEditingUserAccess = {
|
|
40
|
+
args: {
|
|
41
|
+
person: {
|
|
42
|
+
...personsMock[1],
|
|
43
|
+
AccessLevel: 'User'
|
|
44
|
+
},
|
|
45
|
+
userLevel: 'Admin'
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const WithoutHemaRating = {
|
|
50
|
+
args: {
|
|
51
|
+
person: {
|
|
52
|
+
...personsMock[1],
|
|
53
|
+
HemaRatingsId: ''
|
|
54
|
+
},
|
|
55
|
+
userLevel: 'Club'
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const EmptyAccessLevel = {
|
|
60
|
+
args: {
|
|
61
|
+
person: {
|
|
62
|
+
...personsMock[1],
|
|
63
|
+
AccessLevel: ''
|
|
64
|
+
},
|
|
65
|
+
userLevel: 'Club'
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const ClearedHemaRatingId = {
|
|
70
|
+
args: {
|
|
71
|
+
person: { ...personsMock[1], HemaRatingsId: null, HEMARatings: [{ HemaRatingId: 123 }] },
|
|
72
|
+
userLevel: 'Admin'
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const InvalidHemaRatingId = {
|
|
77
|
+
args: {
|
|
78
|
+
person: { ...personsMock[1], HemaRatingsId: '1.5' },
|
|
79
|
+
userLevel: 'Admin'
|
|
80
|
+
}
|
|
81
|
+
};
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
-
import { enableAutoUnmount, mount } from '@vue/test-utils';
|
|
3
|
-
import Administration from './Administration.vue';
|
|
4
|
-
import TitledInput from '../../../../Molecules/CombinationInputs/TitledInput/TitledInput.vue';
|
|
5
|
-
|
|
6
|
-
enableAutoUnmount(afterEach);
|
|
7
|
-
|
|
8
|
-
function mountAdministration(id) {
|
|
9
|
-
return mount(Administration, {
|
|
10
|
-
props: {
|
|
11
|
-
person: { PersonId: 1, HemaRatingsId: id, HEMARatings: [{ HemaRatingId: 123 }], AccessLevel: 'User' },
|
|
12
|
-
userLevel: 'Admin'
|
|
13
|
-
},
|
|
14
|
-
global: { stubs: { DropDownMenu: true } }
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const findHemaInput = wrapper => wrapper.findAllComponents(TitledInput)[1].find('input');
|
|
19
|
-
|
|
20
|
-
describe('Administration HR ID draft', () => {
|
|
21
|
-
it.each([null, ''])('keeps the explicitly cleared ID %j blank', id => {
|
|
22
|
-
const wrapper = mountAdministration(id);
|
|
23
|
-
expect(findHemaInput(wrapper).element.value).toBe('');
|
|
24
|
-
expect(findHemaInput(wrapper).attributes('aria-invalid')).toBe('false');
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('falls back to legacy ratings only when the canonical ID is undefined', () => {
|
|
28
|
-
const wrapper = mountAdministration(undefined);
|
|
29
|
-
expect(findHemaInput(wrapper).element.value).toBe('123');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('shows invalid-ID feedback and preserves invalid input for correction', async () => {
|
|
33
|
-
const wrapper = mountAdministration(0);
|
|
34
|
-
expect(wrapper.text()).toContain('positive whole-number ID');
|
|
35
|
-
expect(findHemaInput(wrapper).attributes('aria-invalid')).toBe('true');
|
|
36
|
-
await findHemaInput(wrapper).setValue('-5');
|
|
37
|
-
expect(wrapper.emitted('update:person')).toEqual([[{ field: 'HemaRatingsId', value: '-5' }]]);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
1
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { enableAutoUnmount, mount } from '@vue/test-utils';
|
|
3
|
+
import Administration from './Administration.vue';
|
|
4
|
+
import TitledInput from '../../../../Molecules/CombinationInputs/TitledInput/TitledInput.vue';
|
|
5
|
+
|
|
6
|
+
enableAutoUnmount(afterEach);
|
|
7
|
+
|
|
8
|
+
function mountAdministration(id) {
|
|
9
|
+
return mount(Administration, {
|
|
10
|
+
props: {
|
|
11
|
+
person: { PersonId: 1, HemaRatingsId: id, HEMARatings: [{ HemaRatingId: 123 }], AccessLevel: 'User' },
|
|
12
|
+
userLevel: 'Admin'
|
|
13
|
+
},
|
|
14
|
+
global: { stubs: { DropDownMenu: true } }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const findHemaInput = wrapper => wrapper.findAllComponents(TitledInput)[1].find('input');
|
|
19
|
+
|
|
20
|
+
describe('Administration HR ID draft', () => {
|
|
21
|
+
it.each([null, ''])('keeps the explicitly cleared ID %j blank', id => {
|
|
22
|
+
const wrapper = mountAdministration(id);
|
|
23
|
+
expect(findHemaInput(wrapper).element.value).toBe('');
|
|
24
|
+
expect(findHemaInput(wrapper).attributes('aria-invalid')).toBe('false');
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('falls back to legacy ratings only when the canonical ID is undefined', () => {
|
|
28
|
+
const wrapper = mountAdministration(undefined);
|
|
29
|
+
expect(findHemaInput(wrapper).element.value).toBe('123');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('shows invalid-ID feedback and preserves invalid input for correction', async () => {
|
|
33
|
+
const wrapper = mountAdministration(0);
|
|
34
|
+
expect(wrapper.text()).toContain('positive whole-number ID');
|
|
35
|
+
expect(findHemaInput(wrapper).attributes('aria-invalid')).toBe('true');
|
|
36
|
+
await findHemaInput(wrapper).setValue('-5');
|
|
37
|
+
expect(wrapper.emitted('update:person')).toEqual([[{ field: 'HemaRatingsId', value: '-5' }]]);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<section class="mt-2">
|
|
3
|
-
<div class="flex flex-col mb-4">
|
|
4
|
-
<TitledInput
|
|
5
|
-
:inputValue="personId"
|
|
6
|
-
:inputType="'number'"
|
|
7
|
-
placeholder="Meyer Squared ID"
|
|
8
|
-
title="Meyer Squared ID"
|
|
9
|
-
:disabled="true"
|
|
10
|
-
aria-disabled="true"
|
|
11
|
-
/>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<div class="flex flex-col mb-4">
|
|
15
|
-
<TitledInput
|
|
16
|
-
:inputValue="hemaRatingId"
|
|
17
|
-
inputType="text"
|
|
18
|
-
placeholder="HEMA Rating ID"
|
|
19
|
-
:invalid="hemaRatingValidation.invalid"
|
|
20
|
-
:title="hemaRatingLabel"
|
|
21
|
-
@update:value="emitUpdate('HemaRatingsId', $event)"
|
|
22
|
-
/>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<div class="flex flex-col mb-4">
|
|
26
|
-
<BaseText text="Access Level" size="sm" color="quaternary" />
|
|
27
|
-
<DropDownMenu
|
|
28
|
-
:key="accessLevelDropdownKey"
|
|
29
|
-
:label="accessLevelLabel"
|
|
30
|
-
:items="accessLevels"
|
|
31
|
-
class="pb-2"
|
|
32
|
-
:selectedItem="selectedAccessLevel"
|
|
33
|
-
@update:selectedItem="emitUpdate('AccessLevel', $event.text)"
|
|
34
|
-
width="w-full"
|
|
35
|
-
dropDownWidth="w-full"
|
|
36
|
-
/>
|
|
37
|
-
</div>
|
|
38
|
-
</section>
|
|
39
|
-
</template>
|
|
40
|
-
|
|
41
|
-
<script>
|
|
42
|
-
import TitledInput from '../../../../Molecules/CombinationInputs/TitledInput/TitledInput.vue';
|
|
43
|
-
import BaseText from '../../../../Atoms/Text/BaseText.vue';
|
|
44
|
-
import DropDownMenu from '../../../../Organisms/ComplexInputs/DropDown/DropDownMenu.vue';
|
|
45
|
-
import { getDraftHemaRatingsId } from '../../PersonManagementDraft.js';
|
|
46
|
-
import { validateField } from '../../../../Util/Validations/PersonManagementValidations.js';
|
|
47
|
-
|
|
48
|
-
const STANDARD_ACCESS_LEVELS = [
|
|
49
|
-
{ text: 'User', link: 'User' },
|
|
50
|
-
{ text: 'Director', link: 'Director' },
|
|
51
|
-
{ text: 'Club', link: 'Club' }
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
const ADMIN_ACCESS_LEVELS = [...STANDARD_ACCESS_LEVELS, { text: 'Admin', link: 'Admin' }];
|
|
55
|
-
|
|
56
|
-
export default {
|
|
57
|
-
name: 'Administration',
|
|
58
|
-
emits: ['update:person'],
|
|
59
|
-
components: { TitledInput, BaseText, DropDownMenu },
|
|
60
|
-
props: {
|
|
61
|
-
person: { type: Object, required: true },
|
|
62
|
-
userLevel: { type: String, required: true }
|
|
63
|
-
},
|
|
64
|
-
computed: {
|
|
65
|
-
personId() {
|
|
66
|
-
return this.person?.PersonId ?? '';
|
|
67
|
-
},
|
|
68
|
-
hemaRatingId() {
|
|
69
|
-
return getDraftHemaRatingsId(this.person);
|
|
70
|
-
},
|
|
71
|
-
hemaRatingValidation() {
|
|
72
|
-
return validateField('HemaRatingsId', this.hemaRatingId);
|
|
73
|
-
},
|
|
74
|
-
hemaRatingLabel() {
|
|
75
|
-
if (this.hemaRatingValidation.invalid) return `HEMA Rating ID - ${this.hemaRatingValidation.message}`;
|
|
76
|
-
return 'HEMA Rating ID';
|
|
77
|
-
},
|
|
78
|
-
accessLevels() {
|
|
79
|
-
if (this.userLevel === 'Admin') {
|
|
80
|
-
return ADMIN_ACCESS_LEVELS;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return STANDARD_ACCESS_LEVELS;
|
|
84
|
-
},
|
|
85
|
-
selectedAccessLevel() {
|
|
86
|
-
return { text: this.person.AccessLevel, link: this.person.AccessLevel };
|
|
87
|
-
},
|
|
88
|
-
accessLevelLabel() {
|
|
89
|
-
return this.person.AccessLevel ? '' : 'Select Access Level';
|
|
90
|
-
},
|
|
91
|
-
accessLevelDropdownKey() {
|
|
92
|
-
return `${this.userLevel}-${this.person.AccessLevel || 'none'}`;
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
methods: {
|
|
96
|
-
emitUpdate(field, value) {
|
|
97
|
-
this.$emit('update:person', { field, value });
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<section class="mt-2">
|
|
3
|
+
<div class="flex flex-col mb-4">
|
|
4
|
+
<TitledInput
|
|
5
|
+
:inputValue="personId"
|
|
6
|
+
:inputType="'number'"
|
|
7
|
+
placeholder="Meyer Squared ID"
|
|
8
|
+
title="Meyer Squared ID"
|
|
9
|
+
:disabled="true"
|
|
10
|
+
aria-disabled="true"
|
|
11
|
+
/>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="flex flex-col mb-4">
|
|
15
|
+
<TitledInput
|
|
16
|
+
:inputValue="hemaRatingId"
|
|
17
|
+
inputType="text"
|
|
18
|
+
placeholder="HEMA Rating ID"
|
|
19
|
+
:invalid="hemaRatingValidation.invalid"
|
|
20
|
+
:title="hemaRatingLabel"
|
|
21
|
+
@update:value="emitUpdate('HemaRatingsId', $event)"
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="flex flex-col mb-4">
|
|
26
|
+
<BaseText text="Access Level" size="sm" color="quaternary" />
|
|
27
|
+
<DropDownMenu
|
|
28
|
+
:key="accessLevelDropdownKey"
|
|
29
|
+
:label="accessLevelLabel"
|
|
30
|
+
:items="accessLevels"
|
|
31
|
+
class="pb-2"
|
|
32
|
+
:selectedItem="selectedAccessLevel"
|
|
33
|
+
@update:selectedItem="emitUpdate('AccessLevel', $event.text)"
|
|
34
|
+
width="w-full"
|
|
35
|
+
dropDownWidth="w-full"
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
</section>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<script>
|
|
42
|
+
import TitledInput from '../../../../Molecules/CombinationInputs/TitledInput/TitledInput.vue';
|
|
43
|
+
import BaseText from '../../../../Atoms/Text/BaseText.vue';
|
|
44
|
+
import DropDownMenu from '../../../../Organisms/ComplexInputs/DropDown/DropDownMenu.vue';
|
|
45
|
+
import { getDraftHemaRatingsId } from '../../PersonManagementDraft.js';
|
|
46
|
+
import { validateField } from '../../../../Util/Validations/PersonManagementValidations.js';
|
|
47
|
+
|
|
48
|
+
const STANDARD_ACCESS_LEVELS = [
|
|
49
|
+
{ text: 'User', link: 'User' },
|
|
50
|
+
{ text: 'Director', link: 'Director' },
|
|
51
|
+
{ text: 'Club', link: 'Club' }
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const ADMIN_ACCESS_LEVELS = [...STANDARD_ACCESS_LEVELS, { text: 'Admin', link: 'Admin' }];
|
|
55
|
+
|
|
56
|
+
export default {
|
|
57
|
+
name: 'Administration',
|
|
58
|
+
emits: ['update:person'],
|
|
59
|
+
components: { TitledInput, BaseText, DropDownMenu },
|
|
60
|
+
props: {
|
|
61
|
+
person: { type: Object, required: true },
|
|
62
|
+
userLevel: { type: String, required: true }
|
|
63
|
+
},
|
|
64
|
+
computed: {
|
|
65
|
+
personId() {
|
|
66
|
+
return this.person?.PersonId ?? '';
|
|
67
|
+
},
|
|
68
|
+
hemaRatingId() {
|
|
69
|
+
return getDraftHemaRatingsId(this.person);
|
|
70
|
+
},
|
|
71
|
+
hemaRatingValidation() {
|
|
72
|
+
return validateField('HemaRatingsId', this.hemaRatingId);
|
|
73
|
+
},
|
|
74
|
+
hemaRatingLabel() {
|
|
75
|
+
if (this.hemaRatingValidation.invalid) return `HEMA Rating ID - ${this.hemaRatingValidation.message}`;
|
|
76
|
+
return 'HEMA Rating ID';
|
|
77
|
+
},
|
|
78
|
+
accessLevels() {
|
|
79
|
+
if (this.userLevel === 'Admin') {
|
|
80
|
+
return ADMIN_ACCESS_LEVELS;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return STANDARD_ACCESS_LEVELS;
|
|
84
|
+
},
|
|
85
|
+
selectedAccessLevel() {
|
|
86
|
+
return { text: this.person.AccessLevel, link: this.person.AccessLevel };
|
|
87
|
+
},
|
|
88
|
+
accessLevelLabel() {
|
|
89
|
+
return this.person.AccessLevel ? '' : 'Select Access Level';
|
|
90
|
+
},
|
|
91
|
+
accessLevelDropdownKey() {
|
|
92
|
+
return `${this.userLevel}-${this.person.AccessLevel || 'none'}`;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
methods: {
|
|
96
|
+
emitUpdate(field, value) {
|
|
97
|
+
this.$emit('update:person', { field, value });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
</script>
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import FencerAdmin from './FencerAdmin.vue';
|
|
2
|
-
import personsMock from '../../../../../mocks/personsMock.js';
|
|
3
|
-
import peopleMock from '../../../../../mocks/personGetAllMock.js';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'Templates/PersonManagement/Admin/FencerAdmin',
|
|
7
|
-
component: FencerAdmin,
|
|
8
|
-
tags: ['autodocs'],
|
|
9
|
-
args: {
|
|
10
|
-
person: personsMock[1],
|
|
11
|
-
people: peopleMock,
|
|
12
|
-
userLevel: 'Club',
|
|
13
|
-
canMergeAccounts: null
|
|
14
|
-
},
|
|
15
|
-
argTypes: {
|
|
16
|
-
person: { control: { type: 'object' } },
|
|
17
|
-
people: { control: { type: 'object' } },
|
|
18
|
-
userLevel: {
|
|
19
|
-
control: { type: 'select' },
|
|
20
|
-
options: ['User', 'Director', 'Club', 'Admin']
|
|
21
|
-
},
|
|
22
|
-
canMergeAccounts: { control: { type: 'boolean' } },
|
|
23
|
-
'update:person': { action: 'update:person' },
|
|
24
|
-
'merge:merge': { action: 'merge:merge' }
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const ClubUser = {
|
|
29
|
-
args: {
|
|
30
|
-
person: {
|
|
31
|
-
...personsMock[1],
|
|
32
|
-
AccessLevel: 'Club'
|
|
33
|
-
},
|
|
34
|
-
people: peopleMock,
|
|
35
|
-
userLevel: 'Club'
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export const AdminViewingUser = {
|
|
40
|
-
args: {
|
|
41
|
-
person: {
|
|
42
|
-
...personsMock[1],
|
|
43
|
-
AccessLevel: 'User'
|
|
44
|
-
},
|
|
45
|
-
people: peopleMock,
|
|
46
|
-
userLevel: 'Admin'
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export const AdminViewingAdmin = {
|
|
51
|
-
args: {
|
|
52
|
-
person: {
|
|
53
|
-
...personsMock[1],
|
|
54
|
-
AccessLevel: 'Admin'
|
|
55
|
-
},
|
|
56
|
-
people: peopleMock,
|
|
57
|
-
userLevel: 'Admin'
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export const MergeDisabledByParent = {
|
|
62
|
-
args: {
|
|
63
|
-
person: {
|
|
64
|
-
...personsMock[1],
|
|
65
|
-
AccessLevel: 'User'
|
|
66
|
-
},
|
|
67
|
-
people: peopleMock,
|
|
68
|
-
userLevel: 'Admin',
|
|
69
|
-
canMergeAccounts: false
|
|
70
|
-
}
|
|
71
|
-
};
|
|
1
|
+
import FencerAdmin from './FencerAdmin.vue';
|
|
2
|
+
import personsMock from '../../../../../mocks/personsMock.js';
|
|
3
|
+
import peopleMock from '../../../../../mocks/personGetAllMock.js';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Templates/PersonManagement/Admin/FencerAdmin',
|
|
7
|
+
component: FencerAdmin,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
args: {
|
|
10
|
+
person: personsMock[1],
|
|
11
|
+
people: peopleMock,
|
|
12
|
+
userLevel: 'Club',
|
|
13
|
+
canMergeAccounts: null
|
|
14
|
+
},
|
|
15
|
+
argTypes: {
|
|
16
|
+
person: { control: { type: 'object' } },
|
|
17
|
+
people: { control: { type: 'object' } },
|
|
18
|
+
userLevel: {
|
|
19
|
+
control: { type: 'select' },
|
|
20
|
+
options: ['User', 'Director', 'Club', 'Admin']
|
|
21
|
+
},
|
|
22
|
+
canMergeAccounts: { control: { type: 'boolean' } },
|
|
23
|
+
'update:person': { action: 'update:person' },
|
|
24
|
+
'merge:merge': { action: 'merge:merge' }
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const ClubUser = {
|
|
29
|
+
args: {
|
|
30
|
+
person: {
|
|
31
|
+
...personsMock[1],
|
|
32
|
+
AccessLevel: 'Club'
|
|
33
|
+
},
|
|
34
|
+
people: peopleMock,
|
|
35
|
+
userLevel: 'Club'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const AdminViewingUser = {
|
|
40
|
+
args: {
|
|
41
|
+
person: {
|
|
42
|
+
...personsMock[1],
|
|
43
|
+
AccessLevel: 'User'
|
|
44
|
+
},
|
|
45
|
+
people: peopleMock,
|
|
46
|
+
userLevel: 'Admin'
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const AdminViewingAdmin = {
|
|
51
|
+
args: {
|
|
52
|
+
person: {
|
|
53
|
+
...personsMock[1],
|
|
54
|
+
AccessLevel: 'Admin'
|
|
55
|
+
},
|
|
56
|
+
people: peopleMock,
|
|
57
|
+
userLevel: 'Admin'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const MergeDisabledByParent = {
|
|
62
|
+
args: {
|
|
63
|
+
person: {
|
|
64
|
+
...personsMock[1],
|
|
65
|
+
AccessLevel: 'User'
|
|
66
|
+
},
|
|
67
|
+
people: peopleMock,
|
|
68
|
+
userLevel: 'Admin',
|
|
69
|
+
canMergeAccounts: false
|
|
70
|
+
}
|
|
71
|
+
};
|