|
90 | 90 | outTableBody.classList.add('crm__output-table-body'); |
91 | 91 | outTblHeadTr.classList.add('crm__output-table-head-row'); |
92 | 92 | outTblHeadThId.classList.add( |
| 93 | + 'crm__output-table-head-cell', |
93 | 94 | 'head-cell', |
94 | | - 'head-cell-with-icon', |
95 | | - 'crm__output-table-head-cell' |
| 95 | + 'head-cell-with-icon' |
96 | 96 | ); |
97 | 97 | outTblHeadThIdWrap.classList.add('head-cell__wrap', 'head-cell__wrap-id'); |
98 | 98 | outTblHeadThIdText.classList.add('head-cell__text', 'head-cell__text-id'); |
|
102 | 102 | 'head-cell__icon-up' |
103 | 103 | ); |
104 | 104 | outTblHeadThFIO.classList.add( |
| 105 | + 'crm__output-table-head-cell', |
105 | 106 | 'head-cell', |
106 | | - 'head-cell-with-icon', |
107 | | - 'crm__output-table-head-cell' |
| 107 | + 'head-cell-with-icon' |
108 | 108 | ); |
109 | 109 | outTblHeadThFIOWrap.classList.add('head-cell__wrap', 'head-cell__wrap-fio'); |
110 | 110 | outTblHeadThFIOText.classList.add('head-cell__text', 'head-cell__text-fio'); |
|
115 | 115 | ); |
116 | 116 | outTblHeadThFIOSort.classList.add('head-cell__sort', 'head-cell__sort-fio'); |
117 | 117 | outTblHeadThCreationDT.classList.add( |
| 118 | + 'crm__output-table-head-cell', |
118 | 119 | 'head-cell', |
119 | | - 'head-cell-with-icon', |
120 | | - 'crm__output-table-head-cell' |
| 120 | + 'head-cell-with-icon' |
121 | 121 | ); |
122 | 122 | outTblHeadThDTWrap.classList.add('head-cell__wrap', 'head-cell__wrap-dt'); |
123 | 123 | outTblHeadThDTText.classList.add('head-cell__text', 'head-cell__text-dt'); |
|
127 | 127 | 'head-cell__icon-down' |
128 | 128 | ); |
129 | 129 | outTblHeadThChanges.classList.add( |
| 130 | + 'crm__output-table-head-cell', |
130 | 131 | 'head-cell', |
131 | | - 'head-cell-with-icon', |
132 | | - 'crm__output-table-head-cell' |
| 132 | + 'head-cell-with-icon' |
133 | 133 | ); |
134 | 134 | outTblHeadThChangeWrap.classList.add( |
135 | 135 | 'head-cell__wrap', |
|
145 | 145 | 'head-cell__icon-down' |
146 | 146 | ); |
147 | 147 | outTblHeadThContacts.classList.add( |
148 | | - 'head-cell', |
149 | | - 'crm__output-table-head-cell' |
| 148 | + 'crm__output-table-head-cell', |
| 149 | + 'head-cell' |
150 | 150 | ); |
151 | 151 | outTblHeadThContactWrap.classList.add( |
152 | 152 | 'head-cell__wrap', |
|
156 | 156 | 'head-cell__text', |
157 | 157 | 'head-cell__text-contact' |
158 | 158 | ); |
159 | | - outTblHeadThActions.classList.add('head-cell', 'crm__output-table-head-cell'); |
| 159 | + outTblHeadThActions.classList.add('crm__output-table-head-cell', 'head-cell'); |
160 | 160 | outTblHeadThActionWrap.classList.add( |
161 | 161 | 'head-cell__wrap', |
162 | 162 | 'head-cell__wrap-action' |
|
3032 | 3032 | }); |
3033 | 3033 | }, 3000); |
3034 | 3034 | } |
| 3035 | + |
| 3036 | + // ** сортировка клиентов/таблицы, по ячейкам заголовочной строки (по нажатию, по возрастанию/убыванию) |
| 3037 | + const allHeaderRowCellsForSort = document.querySelectorAll( |
| 3038 | + '.crm__output-table-head-cell' |
| 3039 | + ); |
| 3040 | + let sortDirectionUpDown = true; |
| 3041 | + |
| 3042 | + function sortClientsByTableCells(event) { |
| 3043 | + const clickedTableCell = event.target.textContent; // определение заглавного поля/ячейки, по которой происходит "click" - событие, фиксация контента |
| 3044 | + |
| 3045 | + console.log(clickedTableCell); |
| 3046 | + |
| 3047 | + updateClientsDataArr.sort((a, b) => { |
| 3048 | + if (clickedTableCell === 'ID') { |
| 3049 | + return a.shortId - b.shortId; |
| 3050 | + } else if (clickedTableCell === 'Фамилия Имя Отчество') { |
| 3051 | + return sortDirectionUpDown |
| 3052 | + ? a.fullName.localeCompare(b.fullName) |
| 3053 | + : b.fullName.localeCompare(a.fullName); |
| 3054 | + } else if (clickedTableCell === 'Дата и время создания') { |
| 3055 | + return sortDirectionUpDown |
| 3056 | + ? a.faculty.localeCompare(b.faculty) |
| 3057 | + : b.faculty.localeCompare(a.faculty); |
| 3058 | + } else if (clickedTableCell === 'Последние изменения') { |
| 3059 | + const birthDateComparison = |
| 3060 | + new Date(a.birthDate).setHours(0, 0, 0, 0) - |
| 3061 | + new Date(b.birthDate).setHours(0, 0, 0, 0); // корректировка часов рождения (всем одно) |
| 3062 | + if (birthDateComparison !== 0) { |
| 3063 | + return sortDirectionUpDown |
| 3064 | + ? birthDateComparison |
| 3065 | + : -birthDateComparison; |
| 3066 | + } |
| 3067 | + return sortDirectionUpDown |
| 3068 | + ? a.fullName.localeCompare(b.fullName) |
| 3069 | + : b.fullName.localeCompare(a.fullName); // если даты рождения равны, по ФИО будет сортировка |
| 3070 | + } else if (clickedTableCell === 'Годы обучения') { |
| 3071 | + const startYearComparison = a.startYear - b.startYear; |
| 3072 | + if (startYearComparison !== 0) { |
| 3073 | + return sortDirectionUpDown |
| 3074 | + ? startYearComparison |
| 3075 | + : -startYearComparison; |
| 3076 | + } |
| 3077 | + return sortDirectionUpDown |
| 3078 | + ? a.fullName.localeCompare(b.fullName) |
| 3079 | + : b.fullName.localeCompare(a.fullName); // если годы начала/окончания равны, по ФИО будет сортировка |
| 3080 | + } |
| 3081 | + return 0; |
| 3082 | + }); |
| 3083 | + |
| 3084 | + addClientsToTable(updateClientsDataArr); // пере-рисовка (пере-компоновка) после сортировки (прожатия ячеек) |
| 3085 | + } |
| 3086 | + |
| 3087 | + allHeaderRowCellsForSort.forEach((cell) => { |
| 3088 | + cell.addEventListener('click', (event) => { |
| 3089 | + sortClientsByTableCells(event); // передача события |
| 3090 | + sortDirectionUpDown = !sortDirectionUpDown; // изменение условия сортировки |
| 3091 | + }); |
| 3092 | + |
| 3093 | + // отработка сортировки/сброса сортировки через TAB/Enter |
| 3094 | + cell.addEventListener('keydown', (event) => { |
| 3095 | + if (event.key === 'Enter') { |
| 3096 | + event.preventDefault(); |
| 3097 | + sortClientsByTableCells(event); // передача события |
| 3098 | + sortDirectionUpDown = !sortDirectionUpDown; // изменение условия сортировки |
| 3099 | + } |
| 3100 | + }); |
| 3101 | + }); |
3035 | 3102 | })(); |
0 commit comments