@byu-oit/vue-decision-processing-components 8.35.8 → 8.35.9
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/.github/workflows/deploy.yml +40 -50
- package/.repo-meta.yml +55 -55
- package/AdmitPeriodConfig.vue +115 -115
- package/ApiCallButton.vue +91 -91
- package/ApplicantInfo.vue +100 -100
- package/AssignmentBulkDialog.vue +153 -153
- package/AssignmentDialog.vue +117 -117
- package/AssignmentSummary.vue +75 -75
- package/BackgroundBadge.vue +83 -83
- package/BackgroundDetailCrime.vue +78 -78
- package/BackgroundDetailPluralMarriage.vue +43 -43
- package/BackgroundDetailSexRegistry.vue +43 -43
- package/BackgroundDetailUniversity.vue +37 -37
- package/CHANGELOG.md +676 -676
- package/Dashboard.vue +201 -201
- package/DashboardApplicationList.vue +50 -50
- package/DecisionDialog.vue +178 -178
- package/Details.vue +124 -124
- package/DetailsActivity.vue +59 -59
- package/DetailsBackground.vue +143 -143
- package/DetailsBackgroundDetail.vue +47 -47
- package/DetailsBackgroundSummary.vue +66 -66
- package/DetailsCesHold.vue +107 -107
- package/DetailsCollege.vue +93 -93
- package/DetailsContact.vue +65 -65
- package/DetailsDecision.vue +183 -183
- package/DetailsDecisionHistory.vue +56 -56
- package/DetailsEndorsement.vue +74 -74
- package/DetailsEssay.vue +59 -59
- package/DetailsFilenote.vue +62 -62
- package/DetailsFilenoteList.vue +109 -109
- package/DetailsFlagSection.vue +176 -176
- package/DetailsHeader.vue +263 -263
- package/DetailsHighSchool.vue +99 -99
- package/DetailsHsTranscript.vue +100 -100
- package/DetailsInstitute.vue +90 -90
- package/DetailsMission.vue +88 -88
- package/DetailsNewAppHistory.vue +50 -50
- package/DetailsNotes.vue +83 -83
- package/DetailsPathway.vue +45 -45
- package/DetailsScoringSection.vue +128 -128
- package/DetailsSection.vue +116 -116
- package/DetailsSeminary.vue +184 -184
- package/DetailsSrs.vue +52 -52
- package/DetailsSubnav.vue +54 -54
- package/DetailsTestScores.vue +131 -131
- package/ExpandIndicator.vue +75 -75
- package/ExternalLink.vue +34 -34
- package/FilterBreadcrumb.vue +85 -85
- package/FilterButton.vue +86 -86
- package/FilterButtonAdmitPeriod.vue +104 -104
- package/FilterButtonAppType.vue +103 -103
- package/FilterButtonAssignedTo.vue +96 -96
- package/FilterButtonClearFilters.vue +65 -65
- package/FilterButtonSex.vue +105 -105
- package/FlagButton.vue +59 -59
- package/FlagDialog.vue +129 -129
- package/Footer.vue +432 -432
- package/Header.vue +132 -132
- package/HighSchoolSummary.vue +60 -60
- package/InternationalIndicator.vue +44 -44
- package/InternationalStatus.vue +48 -48
- package/LICENSE +201 -201
- package/LoadingBadge.vue +58 -58
- package/ManageAssignments.vue +123 -123
- package/NoAuth.vue +14 -14
- package/NoteDialog.vue +106 -106
- package/ObjectViewer.vue +49 -49
- package/Queues.vue +278 -268
- package/QuickLinks.vue +25 -25
- package/README.md +2 -2
- package/RecentApplications.vue +53 -53
- package/Report.vue +340 -340
- package/ReportDetail.vue +279 -279
- package/ReportList.vue +87 -87
- package/ReportPhotos.vue +65 -65
- package/ReportSvg.vue +78 -78
- package/ReportViewer.vue +165 -165
- package/RequestAccess.vue +14 -14
- package/RequestAccessList.vue +45 -45
- package/RoleSelector.vue +29 -29
- package/Search.vue +22 -22
- package/ShowApplicantIds.vue +100 -100
- package/SortableHeader.vue +53 -53
- package/Spinner.vue +34 -34
- package/StarredIndicator.vue +36 -36
- package/StatBox.vue +73 -73
- package/StatCharts.vue +196 -196
- package/SupportDialog.vue +172 -172
- package/UserInfo.vue +52 -52
- package/YesNoIndicator.vue +48 -48
- package/dateTimeFormat.js +67 -67
- package/gpaCalculation.js +162 -162
- package/gpaFilter.js +5 -5
- package/hsSummary.json +2019 -2019
- package/package.json +38 -36
- package/parsers/application.js +396 -396
- package/parsers/decisionHistory.js +27 -27
- package/parsers/filenotes.js +27 -27
- package/parsers/notes.js +49 -49
- package/parsers/packet.js +88 -88
- package/parsers/packetList.js +57 -57
- package/parsers/reports.js +13 -13
- package/sat2Act.js +46 -46
- package/test.js +48 -48
- package/themes/ByuiFooter.vue +38 -38
- package/themes/ByuiHeader.vue +96 -96
- package/themes/LdsbcFooter.vue +38 -38
- package/themes/LdsbcHeader.vue +100 -100
- package/vuexModules/application/activity.js +32 -32
- package/vuexModules/application/applicationList.js +71 -71
- package/vuexModules/application/background.js +47 -47
- package/vuexModules/application/bio.js +38 -38
- package/vuexModules/application/citizenship.js +30 -30
- package/vuexModules/application/collegeSummaries.js +32 -32
- package/vuexModules/application/essay.js +26 -26
- package/vuexModules/application/highSchoolSummaries.js +40 -40
- package/vuexModules/application/index.js +157 -157
- package/vuexModules/application/institute.js +30 -30
- package/vuexModules/application/mission.js +48 -48
- package/vuexModules/application/personalRecords.js +24 -24
- package/vuexModules/application/questions.js +23 -23
- package/vuexModules/application/seminary.js +39 -39
- package/vuexModules/application/testScores.js +26 -26
- package/vuexModules/notes/index.js +22 -22
- package/vuexModules/packet/decision.js +43 -43
- package/vuexModules/packet/decisionHistory.js +28 -28
- package/vuexModules/packet/flags.js +174 -174
- package/vuexModules/packet/index.js +52 -52
- package/vuexModules/packet/packetList.js +127 -127
- package/vuexModules/packet/processes.js +28 -28
- package/vuexModules/reports/index.js +32 -32
- package/vuexModules/ui/index.js +56 -56
- package/vuexModules/users/index.js +46 -46
- package/yyyyMmFilter.js +7 -7
package/DetailsTestScores.vue
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Copyright 2018 Brigham Young University
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
-->
|
|
16
|
-
<template>
|
|
17
|
-
<table class="table table-borderless table-sm">
|
|
18
|
-
<thead>
|
|
19
|
-
<tr>
|
|
20
|
-
<th>Test Name</th>
|
|
21
|
-
<th>Test Date</th>
|
|
22
|
-
<th>Date Processed</th>
|
|
23
|
-
<th class="composite">Composite Score</th>
|
|
24
|
-
<th>Scores</th>
|
|
25
|
-
</tr>
|
|
26
|
-
</thead>
|
|
27
|
-
<tbody>
|
|
28
|
-
<tr v-for="(ts, i) in orderedTestScores">
|
|
29
|
-
<td>
|
|
30
|
-
{{ts.testName}}
|
|
31
|
-
<template v-if="ts.selfReported">
|
|
32
|
-
<br>
|
|
33
|
-
<strong><em>Self Reported</em></strong>
|
|
34
|
-
</template>
|
|
35
|
-
<template v-if="!ts.optIn">
|
|
36
|
-
<br>
|
|
37
|
-
<strong><em>Opt-Out</em></strong>
|
|
38
|
-
</template>
|
|
39
|
-
</td>
|
|
40
|
-
<td>{{ts.testDate | dateFormat}}</td>
|
|
41
|
-
<td>{{ts.dateProcessed | dateFormat}}</td>
|
|
42
|
-
<td v-if="/^SAT/.test(ts.testName)" class="composite">
|
|
43
|
-
<span class="badge badge-primary x-lg">{{ts.compositeScore}}</span>
|
|
44
|
-
<br>
|
|
45
|
-
<span class="bold">({{ts.compositeScore | sat2ActFilter}} ACT)</span>
|
|
46
|
-
</td>
|
|
47
|
-
<td v-else class="composite">
|
|
48
|
-
<span class="badge badge-primary x-lg">{{ts.compositeScore | removeLeadingZeros}}</span>
|
|
49
|
-
</td>
|
|
50
|
-
<td>
|
|
51
|
-
<table class="table table-borderless table-sm" v-if="ts.testComponents.length > 0">
|
|
52
|
-
<thead>
|
|
53
|
-
<th v-for="sub in ts.testComponents" :key="sub.name">{{sub.name}}</th>
|
|
54
|
-
</thead>
|
|
55
|
-
<tbody>
|
|
56
|
-
<td v-for="sub in ts.testComponents" :key="sub.name">{{sub.score | removeLeadingZeros}}</td>
|
|
57
|
-
</tbody>
|
|
58
|
-
</table>
|
|
59
|
-
</td>
|
|
60
|
-
</tr>
|
|
61
|
-
<tr v-if="testScores.length===0">
|
|
62
|
-
<td colspan="4">No test scores recorded</td>
|
|
63
|
-
</tr>
|
|
64
|
-
</tbody>
|
|
65
|
-
</table>
|
|
66
|
-
</template>
|
|
67
|
-
<script>
|
|
68
|
-
import { mapGetters } from 'vuex'
|
|
69
|
-
import { dateFormat } from './dateTimeFormat'
|
|
70
|
-
import { sat2ActFilter } from './sat2Act'
|
|
71
|
-
|
|
72
|
-
function yearMonth2Date (yearMonth) {
|
|
73
|
-
if (!/^[0-9]{4}-[0-9]{2}$/.test(yearMonth)) {
|
|
74
|
-
return yearMonth
|
|
75
|
-
}
|
|
76
|
-
const year = yearMonth.slice(0, 4)
|
|
77
|
-
const month = yearMonth.slice(5, 7)
|
|
78
|
-
return new Date(year, parseInt(month) - 1)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export default {
|
|
82
|
-
name: 'DetailsTestScores',
|
|
83
|
-
computed: {
|
|
84
|
-
...mapGetters([ 'testScores' ]),
|
|
85
|
-
|
|
86
|
-
orderedTestScores() {
|
|
87
|
-
// sort test scores by test date
|
|
88
|
-
const scores = this.testScores.slice().sort((a, b) => {
|
|
89
|
-
const dt1 = yearMonth2Date(a.testDate)
|
|
90
|
-
const dt2 = yearMonth2Date(b.testDate)
|
|
91
|
-
if (!dt1 instanceof Date && !dt2 instanceof Date) return 0
|
|
92
|
-
if (!dt1 instanceof Date) return 1
|
|
93
|
-
if (!dt2 instanceof Date) return -1
|
|
94
|
-
|
|
95
|
-
return dt1 < dt2 ? 1 : -1
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
// sort 'reading' before 'listening' for TOEFL test
|
|
99
|
-
for (let score of scores) {
|
|
100
|
-
if (!score.testComponents || score.testName !== 'TOEFL') continue
|
|
101
|
-
score.testComponents = score.testComponents.sort((a, b) => {
|
|
102
|
-
if (a.name === 'listening' && b.name === 'reading') return 1
|
|
103
|
-
return 0
|
|
104
|
-
})
|
|
105
|
-
}
|
|
106
|
-
return scores
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
filters: {
|
|
110
|
-
dateFormat,
|
|
111
|
-
sat2ActFilter,
|
|
112
|
-
removeLeadingZeros: function (value) {
|
|
113
|
-
if ( (!value) || !(/^\d+$/.test(value)) ) return value // leave as is if not a string of numbers
|
|
114
|
-
return parseInt(value, 10) // remove leading zeros
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
</script>
|
|
119
|
-
<style scoped>
|
|
120
|
-
.composite {
|
|
121
|
-
text-align: center;
|
|
122
|
-
vertical-align: center;
|
|
123
|
-
}
|
|
124
|
-
.x-lg {
|
|
125
|
-
font-size: 1.4rem;
|
|
126
|
-
font-weight: 700;
|
|
127
|
-
}
|
|
128
|
-
.bold {
|
|
129
|
-
font-weight: 700;
|
|
130
|
-
}
|
|
131
|
-
</style>
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2018 Brigham Young University
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
-->
|
|
16
|
+
<template>
|
|
17
|
+
<table class="table table-borderless table-sm">
|
|
18
|
+
<thead>
|
|
19
|
+
<tr>
|
|
20
|
+
<th>Test Name</th>
|
|
21
|
+
<th>Test Date</th>
|
|
22
|
+
<th>Date Processed</th>
|
|
23
|
+
<th class="composite">Composite Score</th>
|
|
24
|
+
<th>Scores</th>
|
|
25
|
+
</tr>
|
|
26
|
+
</thead>
|
|
27
|
+
<tbody>
|
|
28
|
+
<tr v-for="(ts, i) in orderedTestScores">
|
|
29
|
+
<td>
|
|
30
|
+
{{ts.testName}}
|
|
31
|
+
<template v-if="ts.selfReported">
|
|
32
|
+
<br>
|
|
33
|
+
<strong><em>Self Reported</em></strong>
|
|
34
|
+
</template>
|
|
35
|
+
<template v-if="!ts.optIn">
|
|
36
|
+
<br>
|
|
37
|
+
<strong><em>Opt-Out</em></strong>
|
|
38
|
+
</template>
|
|
39
|
+
</td>
|
|
40
|
+
<td>{{ts.testDate | dateFormat}}</td>
|
|
41
|
+
<td>{{ts.dateProcessed | dateFormat}}</td>
|
|
42
|
+
<td v-if="/^SAT/.test(ts.testName)" class="composite">
|
|
43
|
+
<span class="badge badge-primary x-lg">{{ts.compositeScore}}</span>
|
|
44
|
+
<br>
|
|
45
|
+
<span class="bold">({{ts.compositeScore | sat2ActFilter}} ACT)</span>
|
|
46
|
+
</td>
|
|
47
|
+
<td v-else class="composite">
|
|
48
|
+
<span class="badge badge-primary x-lg">{{ts.compositeScore | removeLeadingZeros}}</span>
|
|
49
|
+
</td>
|
|
50
|
+
<td>
|
|
51
|
+
<table class="table table-borderless table-sm" v-if="ts.testComponents.length > 0">
|
|
52
|
+
<thead>
|
|
53
|
+
<th v-for="sub in ts.testComponents" :key="sub.name">{{sub.name}}</th>
|
|
54
|
+
</thead>
|
|
55
|
+
<tbody>
|
|
56
|
+
<td v-for="sub in ts.testComponents" :key="sub.name">{{sub.score | removeLeadingZeros}}</td>
|
|
57
|
+
</tbody>
|
|
58
|
+
</table>
|
|
59
|
+
</td>
|
|
60
|
+
</tr>
|
|
61
|
+
<tr v-if="testScores.length===0">
|
|
62
|
+
<td colspan="4">No test scores recorded</td>
|
|
63
|
+
</tr>
|
|
64
|
+
</tbody>
|
|
65
|
+
</table>
|
|
66
|
+
</template>
|
|
67
|
+
<script>
|
|
68
|
+
import { mapGetters } from 'vuex'
|
|
69
|
+
import { dateFormat } from './dateTimeFormat'
|
|
70
|
+
import { sat2ActFilter } from './sat2Act'
|
|
71
|
+
|
|
72
|
+
function yearMonth2Date (yearMonth) {
|
|
73
|
+
if (!/^[0-9]{4}-[0-9]{2}$/.test(yearMonth)) {
|
|
74
|
+
return yearMonth
|
|
75
|
+
}
|
|
76
|
+
const year = yearMonth.slice(0, 4)
|
|
77
|
+
const month = yearMonth.slice(5, 7)
|
|
78
|
+
return new Date(year, parseInt(month) - 1)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default {
|
|
82
|
+
name: 'DetailsTestScores',
|
|
83
|
+
computed: {
|
|
84
|
+
...mapGetters([ 'testScores' ]),
|
|
85
|
+
|
|
86
|
+
orderedTestScores() {
|
|
87
|
+
// sort test scores by test date
|
|
88
|
+
const scores = this.testScores.slice().sort((a, b) => {
|
|
89
|
+
const dt1 = yearMonth2Date(a.testDate)
|
|
90
|
+
const dt2 = yearMonth2Date(b.testDate)
|
|
91
|
+
if (!dt1 instanceof Date && !dt2 instanceof Date) return 0
|
|
92
|
+
if (!dt1 instanceof Date) return 1
|
|
93
|
+
if (!dt2 instanceof Date) return -1
|
|
94
|
+
|
|
95
|
+
return dt1 < dt2 ? 1 : -1
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// sort 'reading' before 'listening' for TOEFL test
|
|
99
|
+
for (let score of scores) {
|
|
100
|
+
if (!score.testComponents || score.testName !== 'TOEFL') continue
|
|
101
|
+
score.testComponents = score.testComponents.sort((a, b) => {
|
|
102
|
+
if (a.name === 'listening' && b.name === 'reading') return 1
|
|
103
|
+
return 0
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
return scores
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
filters: {
|
|
110
|
+
dateFormat,
|
|
111
|
+
sat2ActFilter,
|
|
112
|
+
removeLeadingZeros: function (value) {
|
|
113
|
+
if ( (!value) || !(/^\d+$/.test(value)) ) return value // leave as is if not a string of numbers
|
|
114
|
+
return parseInt(value, 10) // remove leading zeros
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
</script>
|
|
119
|
+
<style scoped>
|
|
120
|
+
.composite {
|
|
121
|
+
text-align: center;
|
|
122
|
+
vertical-align: center;
|
|
123
|
+
}
|
|
124
|
+
.x-lg {
|
|
125
|
+
font-size: 1.4rem;
|
|
126
|
+
font-weight: 700;
|
|
127
|
+
}
|
|
128
|
+
.bold {
|
|
129
|
+
font-weight: 700;
|
|
130
|
+
}
|
|
131
|
+
</style>
|
package/ExpandIndicator.vue
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Copyright 2018 Brigham Young University
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
-->
|
|
16
|
-
<template>
|
|
17
|
-
<div class="wrapper" @click="toggle">
|
|
18
|
-
<template v-if="!hideText">
|
|
19
|
-
<template v-if="collapsed">more</template>
|
|
20
|
-
<template v-else>less</template>
|
|
21
|
-
</template>
|
|
22
|
-
<font-awesome-layers>
|
|
23
|
-
<font-awesome-icon :icon="circleIcon" />
|
|
24
|
-
<font-awesome-icon :icon="plusMinusIcon" transform="shrink-6" />
|
|
25
|
-
</font-awesome-layers>
|
|
26
|
-
</div>
|
|
27
|
-
</template>
|
|
28
|
-
<script>
|
|
29
|
-
import { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'
|
|
30
|
-
import { faPlus, faMinus } from '@fortawesome/free-solid-svg-icons'
|
|
31
|
-
import { faCircle } from '@fortawesome/free-regular-svg-icons'
|
|
32
|
-
|
|
33
|
-
export default {
|
|
34
|
-
name: 'ExpandIndicator',
|
|
35
|
-
components: { FontAwesomeIcon, FontAwesomeLayers },
|
|
36
|
-
props: {
|
|
37
|
-
collapsed: {
|
|
38
|
-
type: Boolean,
|
|
39
|
-
default: false
|
|
40
|
-
},
|
|
41
|
-
hideText: {
|
|
42
|
-
type: Boolean,
|
|
43
|
-
default: false
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
computed: {
|
|
47
|
-
circleIcon () { return faCircle },
|
|
48
|
-
plusIcon () { return faPlus },
|
|
49
|
-
minusIcon () { return faMinus },
|
|
50
|
-
plusMinusIcon () {
|
|
51
|
-
if (this.collapsed) {
|
|
52
|
-
return this.plusIcon
|
|
53
|
-
}
|
|
54
|
-
return this.minusIcon
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
methods: {
|
|
58
|
-
toggle () {
|
|
59
|
-
this.$emit('toggle')
|
|
60
|
-
if (this.collapsed) {
|
|
61
|
-
this.$emit('update:collapsed', false)
|
|
62
|
-
} else {
|
|
63
|
-
this.$emit('update:collapsed', true)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
</script>
|
|
69
|
-
<style scoped>
|
|
70
|
-
.wrapper {
|
|
71
|
-
text-transform: uppercase;
|
|
72
|
-
/* padding: 0.5rem; */
|
|
73
|
-
cursor: pointer;
|
|
74
|
-
}
|
|
75
|
-
</style>
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2018 Brigham Young University
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
-->
|
|
16
|
+
<template>
|
|
17
|
+
<div class="wrapper" @click="toggle">
|
|
18
|
+
<template v-if="!hideText">
|
|
19
|
+
<template v-if="collapsed">more</template>
|
|
20
|
+
<template v-else>less</template>
|
|
21
|
+
</template>
|
|
22
|
+
<font-awesome-layers>
|
|
23
|
+
<font-awesome-icon :icon="circleIcon" />
|
|
24
|
+
<font-awesome-icon :icon="plusMinusIcon" transform="shrink-6" />
|
|
25
|
+
</font-awesome-layers>
|
|
26
|
+
</div>
|
|
27
|
+
</template>
|
|
28
|
+
<script>
|
|
29
|
+
import { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'
|
|
30
|
+
import { faPlus, faMinus } from '@fortawesome/free-solid-svg-icons'
|
|
31
|
+
import { faCircle } from '@fortawesome/free-regular-svg-icons'
|
|
32
|
+
|
|
33
|
+
export default {
|
|
34
|
+
name: 'ExpandIndicator',
|
|
35
|
+
components: { FontAwesomeIcon, FontAwesomeLayers },
|
|
36
|
+
props: {
|
|
37
|
+
collapsed: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: false
|
|
40
|
+
},
|
|
41
|
+
hideText: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
default: false
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
computed: {
|
|
47
|
+
circleIcon () { return faCircle },
|
|
48
|
+
plusIcon () { return faPlus },
|
|
49
|
+
minusIcon () { return faMinus },
|
|
50
|
+
plusMinusIcon () {
|
|
51
|
+
if (this.collapsed) {
|
|
52
|
+
return this.plusIcon
|
|
53
|
+
}
|
|
54
|
+
return this.minusIcon
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
methods: {
|
|
58
|
+
toggle () {
|
|
59
|
+
this.$emit('toggle')
|
|
60
|
+
if (this.collapsed) {
|
|
61
|
+
this.$emit('update:collapsed', false)
|
|
62
|
+
} else {
|
|
63
|
+
this.$emit('update:collapsed', true)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
</script>
|
|
69
|
+
<style scoped>
|
|
70
|
+
.wrapper {
|
|
71
|
+
text-transform: uppercase;
|
|
72
|
+
/* padding: 0.5rem; */
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
}
|
|
75
|
+
</style>
|
package/ExternalLink.vue
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<a :href="href" target="_blank" data-disable-navigate="true">
|
|
3
|
-
<button v-if="buttonColor" :class="`btn-sm ${outline ? 'btn-outline-' : 'btn-'}${buttonColor}`">
|
|
4
|
-
<slot></slot>
|
|
5
|
-
<font-awesome-icon :icon="icon"/>
|
|
6
|
-
</button>
|
|
7
|
-
<template v-else>
|
|
8
|
-
<slot></slot>
|
|
9
|
-
<font-awesome-icon :icon="icon"/>
|
|
10
|
-
</template>
|
|
11
|
-
</a>
|
|
12
|
-
</template>
|
|
13
|
-
<script>
|
|
14
|
-
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
|
15
|
-
import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'
|
|
16
|
-
|
|
17
|
-
export default {
|
|
18
|
-
name: 'ExternalLink',
|
|
19
|
-
components: { FontAwesomeIcon },
|
|
20
|
-
props: {
|
|
21
|
-
href: {
|
|
22
|
-
type: String,
|
|
23
|
-
required: true
|
|
24
|
-
},
|
|
25
|
-
buttonColor: String,
|
|
26
|
-
outline: Boolean
|
|
27
|
-
},
|
|
28
|
-
computed: {
|
|
29
|
-
icon () {
|
|
30
|
-
return faExternalLinkAlt
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<a :href="href" target="_blank" data-disable-navigate="true">
|
|
3
|
+
<button v-if="buttonColor" :class="`btn-sm ${outline ? 'btn-outline-' : 'btn-'}${buttonColor}`">
|
|
4
|
+
<slot></slot>
|
|
5
|
+
<font-awesome-icon :icon="icon"/>
|
|
6
|
+
</button>
|
|
7
|
+
<template v-else>
|
|
8
|
+
<slot></slot>
|
|
9
|
+
<font-awesome-icon :icon="icon"/>
|
|
10
|
+
</template>
|
|
11
|
+
</a>
|
|
12
|
+
</template>
|
|
13
|
+
<script>
|
|
14
|
+
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
|
15
|
+
import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'
|
|
16
|
+
|
|
17
|
+
export default {
|
|
18
|
+
name: 'ExternalLink',
|
|
19
|
+
components: { FontAwesomeIcon },
|
|
20
|
+
props: {
|
|
21
|
+
href: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: true
|
|
24
|
+
},
|
|
25
|
+
buttonColor: String,
|
|
26
|
+
outline: Boolean
|
|
27
|
+
},
|
|
28
|
+
computed: {
|
|
29
|
+
icon () {
|
|
30
|
+
return faExternalLinkAlt
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
</script>
|
package/FilterBreadcrumb.vue
CHANGED
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="grid" v-if="filterDisplay">
|
|
3
|
-
<span>Displaying Only:</span>
|
|
4
|
-
<div class="filters">
|
|
5
|
-
<span v-for="item of filterDisplay" :key="item">
|
|
6
|
-
{{ item }}
|
|
7
|
-
</span>
|
|
8
|
-
</div>
|
|
9
|
-
<slot></slot>
|
|
10
|
-
</div>
|
|
11
|
-
</template>
|
|
12
|
-
<script>
|
|
13
|
-
import { mapGetters } from 'vuex'
|
|
14
|
-
import { yearTermLongFormat } from './dateTimeFormat'
|
|
15
|
-
|
|
16
|
-
export default {
|
|
17
|
-
name: 'FilterBreadcrumb',
|
|
18
|
-
props: {
|
|
19
|
-
filters: {
|
|
20
|
-
type: Array
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
computed: {
|
|
24
|
-
...mapGetters(['usersById', 'packetListFilters']),
|
|
25
|
-
filterDisplay() {
|
|
26
|
-
const filters = this.filters || this.packetListFilters
|
|
27
|
-
if (!filters || filters.length === 0) {
|
|
28
|
-
return ''
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const filterObjectToString = ({ type, value }) => {
|
|
32
|
-
const values = value.split(',')
|
|
33
|
-
if(values.length === 0) {
|
|
34
|
-
return null
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (type === 'admitPeriod') {
|
|
38
|
-
return `Admit Period${values.length > 1 ? 's' : ''}: ${values.map(yearTermLongFormat).join(', ')}`
|
|
39
|
-
} else if (type === 'applicantType') {
|
|
40
|
-
return `App Type${values.length > 1 ? 's' : ''}: ${values.join(', ')}`
|
|
41
|
-
} else if (type === 'assignedTo') {
|
|
42
|
-
return `Assigned To: ${values.map(id => this.usersById(id).name).join(' or ')}`
|
|
43
|
-
} else if (type === 'sex') {
|
|
44
|
-
return `Sex: ${values.join(' or ')}`
|
|
45
|
-
} else if (type === 'population') {
|
|
46
|
-
return `Population${values.length > 1 ? 's' : ''}: ${values.map(pop => {
|
|
47
|
-
return {
|
|
48
|
-
IA: 'International',
|
|
49
|
-
HI: 'Hawaii',
|
|
50
|
-
IW: 'iWork'
|
|
51
|
-
}[pop] || 'Unknown'
|
|
52
|
-
}).join(', ')}`
|
|
53
|
-
} else if (type === 'act') {
|
|
54
|
-
return `ACT: >= ${values.join(', ')}`
|
|
55
|
-
} else if (type === 'gpa') {
|
|
56
|
-
return `GPA: >= ${values.join(', ')}`
|
|
57
|
-
} else if (type === 'cumulativeGpa') {
|
|
58
|
-
return `Cumulative College GPA: >= ${values.join(', ')}`
|
|
59
|
-
} else {
|
|
60
|
-
const typeTitle = type.replace(/^\S/, letter => letter.toUpperCase())
|
|
61
|
-
return `${typeTitle}: ${values.join(', ')}`
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return filters.map(filterObjectToString).filter(s => !!s)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
</script>
|
|
70
|
-
<style scoped>
|
|
71
|
-
.grid {
|
|
72
|
-
display: grid;
|
|
73
|
-
grid-template-columns: repeat(3, auto) 1fr;
|
|
74
|
-
align-items: center;
|
|
75
|
-
padding-top: 0.5rem;
|
|
76
|
-
}
|
|
77
|
-
.filters {
|
|
78
|
-
background-color: #e0e0e0;
|
|
79
|
-
padding: 0.25rem 0.5rem;
|
|
80
|
-
border-radius: 5px;
|
|
81
|
-
}
|
|
82
|
-
.filters > span:not(:first-child)::before {
|
|
83
|
-
content: ' / ';
|
|
84
|
-
}
|
|
85
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="grid" v-if="filterDisplay">
|
|
3
|
+
<span>Displaying Only:</span>
|
|
4
|
+
<div class="filters">
|
|
5
|
+
<span v-for="item of filterDisplay" :key="item">
|
|
6
|
+
{{ item }}
|
|
7
|
+
</span>
|
|
8
|
+
</div>
|
|
9
|
+
<slot></slot>
|
|
10
|
+
</div>
|
|
11
|
+
</template>
|
|
12
|
+
<script>
|
|
13
|
+
import { mapGetters } from 'vuex'
|
|
14
|
+
import { yearTermLongFormat } from './dateTimeFormat'
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
name: 'FilterBreadcrumb',
|
|
18
|
+
props: {
|
|
19
|
+
filters: {
|
|
20
|
+
type: Array
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
computed: {
|
|
24
|
+
...mapGetters(['usersById', 'packetListFilters']),
|
|
25
|
+
filterDisplay() {
|
|
26
|
+
const filters = this.filters || this.packetListFilters
|
|
27
|
+
if (!filters || filters.length === 0) {
|
|
28
|
+
return ''
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const filterObjectToString = ({ type, value }) => {
|
|
32
|
+
const values = value.split(',')
|
|
33
|
+
if(values.length === 0) {
|
|
34
|
+
return null
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (type === 'admitPeriod') {
|
|
38
|
+
return `Admit Period${values.length > 1 ? 's' : ''}: ${values.map(yearTermLongFormat).join(', ')}`
|
|
39
|
+
} else if (type === 'applicantType') {
|
|
40
|
+
return `App Type${values.length > 1 ? 's' : ''}: ${values.join(', ')}`
|
|
41
|
+
} else if (type === 'assignedTo') {
|
|
42
|
+
return `Assigned To: ${values.map(id => this.usersById(id).name).join(' or ')}`
|
|
43
|
+
} else if (type === 'sex') {
|
|
44
|
+
return `Sex: ${values.join(' or ')}`
|
|
45
|
+
} else if (type === 'population') {
|
|
46
|
+
return `Population${values.length > 1 ? 's' : ''}: ${values.map(pop => {
|
|
47
|
+
return {
|
|
48
|
+
IA: 'International',
|
|
49
|
+
HI: 'Hawaii',
|
|
50
|
+
IW: 'iWork'
|
|
51
|
+
}[pop] || 'Unknown'
|
|
52
|
+
}).join(', ')}`
|
|
53
|
+
} else if (type === 'act') {
|
|
54
|
+
return `ACT: >= ${values.join(', ')}`
|
|
55
|
+
} else if (type === 'gpa') {
|
|
56
|
+
return `GPA: >= ${values.join(', ')}`
|
|
57
|
+
} else if (type === 'cumulativeGpa') {
|
|
58
|
+
return `Cumulative College GPA: >= ${values.join(', ')}`
|
|
59
|
+
} else {
|
|
60
|
+
const typeTitle = type.replace(/^\S/, letter => letter.toUpperCase())
|
|
61
|
+
return `${typeTitle}: ${values.join(', ')}`
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return filters.map(filterObjectToString).filter(s => !!s)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
</script>
|
|
70
|
+
<style scoped>
|
|
71
|
+
.grid {
|
|
72
|
+
display: grid;
|
|
73
|
+
grid-template-columns: repeat(3, auto) 1fr;
|
|
74
|
+
align-items: center;
|
|
75
|
+
padding-top: 0.5rem;
|
|
76
|
+
}
|
|
77
|
+
.filters {
|
|
78
|
+
background-color: #e0e0e0;
|
|
79
|
+
padding: 0.25rem 0.5rem;
|
|
80
|
+
border-radius: 5px;
|
|
81
|
+
}
|
|
82
|
+
.filters > span:not(:first-child)::before {
|
|
83
|
+
content: ' / ';
|
|
84
|
+
}
|
|
85
|
+
</style>
|