FEATURE fonds archives toolbar api ajax behaviour
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
75dbc89ee4
commit
4d0308b487
|
|
@ -150,6 +150,7 @@ function build_fonds_archives_posts_by_letter($request)
|
||||||
$posts_per_page = esc_html($request->get_param('posts_per_page')) ?? -1;
|
$posts_per_page = esc_html($request->get_param('posts_per_page')) ?? -1;
|
||||||
|
|
||||||
$start_letter = sanitize_text_field($request->get_param('start_letter'));
|
$start_letter = sanitize_text_field($request->get_param('start_letter'));
|
||||||
|
$show_all_letters = filter_var($request->get_param('show_all_letters'), FILTER_VALIDATE_BOOLEAN);
|
||||||
|
|
||||||
// Construire les arguments de la query WordPress
|
// Construire les arguments de la query WordPress
|
||||||
$args = array(
|
$args = array(
|
||||||
|
|
@ -158,10 +159,14 @@ function build_fonds_archives_posts_by_letter($request)
|
||||||
'posts_per_page' => $posts_per_page,
|
'posts_per_page' => $posts_per_page,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!empty($start_letter)) {
|
// Si "show all" est actif, on n'applique aucun filtre alphabétique.
|
||||||
|
if (!$show_all_letters && !empty($start_letter)) {
|
||||||
$args['carhop_start_letter'] = $start_letter;
|
$args['carhop_start_letter'] = $start_letter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($show_all_letters) {
|
||||||
|
remove_filter('posts_where', 'carhop_posts_where_starts_with_letter', 10);
|
||||||
|
}
|
||||||
|
|
||||||
// Gestion du tri
|
// Gestion du tri
|
||||||
switch ($sort_by) {
|
switch ($sort_by) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
.fonds-archives-grid {
|
.fonds-archives-grid {
|
||||||
&__toolbar {
|
&__toolbar {
|
||||||
|
@apply flex flex-row items-end flex-wrap;
|
||||||
.alphabetical-order-select {
|
.alphabetical-order-select {
|
||||||
@apply border-y border-carhop-green-700 py-10;
|
@apply border-y border-carhop-green-700 py-10;
|
||||||
@apply col-span-2;
|
@apply col-span-2;
|
||||||
|
|
@ -14,5 +15,26 @@
|
||||||
@apply font-extrabold underline underline-offset-4;
|
@apply font-extrabold underline underline-offset-4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.alphabetical-order-select {
|
||||||
|
@apply w-full;
|
||||||
|
}
|
||||||
|
select[name='sort_by'] {
|
||||||
|
@apply ml-auto;
|
||||||
|
}
|
||||||
|
.reset-button {
|
||||||
|
@apply hidden relative items-center justify-center gap-3;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@apply underline underline-offset-4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:has(.alphabetical-order-select__button[aria-pressed='true']) {
|
||||||
|
&:not(.alphabetical-order-select__button[data-letter='all']) {
|
||||||
|
.reset-button {
|
||||||
|
@apply flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ export default function archivesFondsArchivesInit() {
|
||||||
const sortBySelect = toolbar.querySelector(
|
const sortBySelect = toolbar.querySelector(
|
||||||
'select[name="sort_by"]',
|
'select[name="sort_by"]',
|
||||||
) as HTMLSelectElement;
|
) as HTMLSelectElement;
|
||||||
|
const resetButton = toolbar.querySelectorAll(
|
||||||
|
'.reset-button',
|
||||||
|
) as NodeListOf<HTMLButtonElement>;
|
||||||
const postsContainer = document.querySelector('.post-grid__list');
|
const postsContainer = document.querySelector('.post-grid__list');
|
||||||
const postCountElement = document.querySelector('.post-count__count');
|
const postCountElement = document.querySelector('.post-count__count');
|
||||||
|
|
||||||
|
|
@ -21,14 +24,24 @@ export default function archivesFondsArchivesInit() {
|
||||||
function setActiveLetterButton(letter: string) {
|
function setActiveLetterButton(letter: string) {
|
||||||
lettersButtons.forEach((button) => {
|
lettersButtons.forEach((button) => {
|
||||||
const isActive = button.dataset.letter === letter;
|
const isActive = button.dataset.letter === letter;
|
||||||
|
|
||||||
button.classList.toggle('is-active', isActive);
|
button.classList.toggle('is-active', isActive);
|
||||||
button.setAttribute('aria-pressed', isActive ? 'true' : 'false');
|
button.setAttribute('aria-pressed', isActive ? 'true' : 'false');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resetSearch() {
|
||||||
|
activeLetter = 'all';
|
||||||
|
setActiveLetterButton(activeLetter);
|
||||||
|
hydrateFondsArchivesByLetter();
|
||||||
|
}
|
||||||
|
|
||||||
async function hydrateFondsArchivesByLetter() {
|
async function hydrateFondsArchivesByLetter() {
|
||||||
|
const showAllLetters = activeLetter === 'all' || activeLetter === '';
|
||||||
|
const startLetter = showAllLetters ? '' : activeLetter;
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
start_letter: activeLetter,
|
start_letter: startLetter,
|
||||||
|
show_all_letters: showAllLetters ? 'true' : 'false',
|
||||||
sort_by: sortBySelect?.value ?? 'title_asc',
|
sort_by: sortBySelect?.value ?? 'title_asc',
|
||||||
post_type: 'fonds-archives',
|
post_type: 'fonds-archives',
|
||||||
});
|
});
|
||||||
|
|
@ -61,12 +74,25 @@ export default function archivesFondsArchivesInit() {
|
||||||
button.addEventListener('click', (event) => {
|
button.addEventListener('click', (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const clickedLetter = button.dataset.letter ?? '';
|
const clickedLetter = button.dataset.letter ?? '';
|
||||||
activeLetter = activeLetter === clickedLetter ? '' : clickedLetter;
|
if (clickedLetter === 'all') {
|
||||||
|
activeLetter = 'all';
|
||||||
|
} else {
|
||||||
|
activeLetter = activeLetter === clickedLetter ? '' : clickedLetter;
|
||||||
|
}
|
||||||
setActiveLetterButton(activeLetter);
|
setActiveLetterButton(activeLetter);
|
||||||
hydrateFondsArchivesByLetter();
|
hydrateFondsArchivesByLetter();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (resetButton) {
|
||||||
|
resetButton.forEach((button) => {
|
||||||
|
button.addEventListener('click', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
resetSearch();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (sortBySelect) {
|
if (sortBySelect) {
|
||||||
sortBySelect.addEventListener('change', () => {
|
sortBySelect.addEventListener('change', () => {
|
||||||
hydrateFondsArchivesByLetter();
|
hydrateFondsArchivesByLetter();
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ $etiquette_active_filter_slug = $args['etiquette_active_filter_slug'] ?? null;
|
||||||
|
|
||||||
$post_ids = wp_list_pluck($posts_query->posts, 'ID');
|
$post_ids = wp_list_pluck($posts_query->posts, 'ID');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$types = get_terms(array(
|
$types = get_terms(array(
|
||||||
'taxonomy' => 'type',
|
'taxonomy' => 'type',
|
||||||
'hide_empty' => true,
|
'hide_empty' => true,
|
||||||
|
|
@ -38,6 +40,10 @@ $tags = get_terms(array(
|
||||||
</span>
|
</span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</h2>
|
</h2>
|
||||||
|
<button class="reset-button">
|
||||||
|
<img src="<?php echo get_template_directory_uri(); ?>/resources/img/icons/carhop-reset-search-cross-green.svg" alt="<?php _e('Réinitialiser', 'carhop'); ?>">
|
||||||
|
<?php _e('Réinitialiser la recherche', 'dynamiques'); ?>
|
||||||
|
</button>
|
||||||
<select name="sort_by">
|
<select name="sort_by">
|
||||||
<option value="date_desc" selected><?php _e('Numéros récents en premier', 'dynamiques'); ?></option>
|
<option value="date_desc" selected><?php _e('Numéros récents en premier', 'dynamiques'); ?></option>
|
||||||
<option value="date_asc"><?php _e('Numéros anciens en premier', 'dynamiques'); ?></option>
|
<option value="date_asc"><?php _e('Numéros anciens en premier', 'dynamiques'); ?></option>
|
||||||
|
|
@ -53,6 +59,10 @@ $tags = get_terms(array(
|
||||||
<?php echo $letter; ?>
|
<?php echo $letter; ?>
|
||||||
</button>
|
</button>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
<button class="reset-button" data-letter="all">
|
||||||
|
<?php _e('Tous', 'dynamiques'); ?>
|
||||||
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Loading…
Reference in New Issue
Block a user