improve loading indicator
This commit is contained in:
parent
456b4a9da1
commit
c4c3b11baf
|
@ -11,9 +11,9 @@ const NAME = '<wordpress-name>'
|
||||||
export default ({ attributes, setAttributes }) => {
|
export default ({ attributes, setAttributes }) => {
|
||||||
const blockProps = useBlockProps()
|
const blockProps = useBlockProps()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
reloadEventLists()
|
reloadEventList()
|
||||||
}, [])
|
}, [])
|
||||||
function reloadEventLists() {
|
function reloadEventList() {
|
||||||
const container = document.getElementById(blockProps.id)
|
const container = document.getElementById(blockProps.id)
|
||||||
if (container) {
|
if (container) {
|
||||||
loadEventList(container)
|
loadEventList(container)
|
||||||
|
@ -23,11 +23,11 @@ export default ({ attributes, setAttributes }) => {
|
||||||
let newValue = Number(event.target.value)
|
let newValue = Number(event.target.value)
|
||||||
if (newValue < 1) newValue = 1
|
if (newValue < 1) newValue = 1
|
||||||
setAttributes({ eventsCount: newValue })
|
setAttributes({ eventsCount: newValue })
|
||||||
reloadEventLists()
|
reloadEventList()
|
||||||
}
|
}
|
||||||
function updateGroupName(event) {
|
function updateGroupName(event) {
|
||||||
setAttributes({ groupName: event.target.value })
|
setAttributes({ groupName: event.target.value })
|
||||||
reloadEventLists()
|
reloadEventList()
|
||||||
}
|
}
|
||||||
return [
|
return [
|
||||||
<InspectorControls>
|
<InspectorControls>
|
||||||
|
@ -66,15 +66,16 @@ export default ({ attributes, setAttributes }) => {
|
||||||
data-group-name={attributes.groupName}
|
data-group-name={attributes.groupName}
|
||||||
{...blockProps}
|
{...blockProps}
|
||||||
>
|
>
|
||||||
<div style={{ display: 'none' }}>
|
<div className="general-error" style={{ display: 'none' }}>
|
||||||
{__('The events could not be loaded!', '<wordpress-name>')}
|
{__('The events could not be loaded!', '<wordpress-name>')}
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: 'none' }}>
|
<div className="group-not-found" style={{ display: 'none' }}>
|
||||||
{__('The group could not be found!', '<wordpress-name>')}
|
{__('The group could not be found!', '<wordpress-name>')}
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<div className="loading-indicator" style={{ display: 'none' }}>
|
||||||
<li>{__('Loading...', '<wordpress-name>')}</li>
|
{__('Loading...', '<wordpress-name>')}
|
||||||
</ul>
|
</div>
|
||||||
|
<ul></ul>
|
||||||
</div>,
|
</div>,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,23 +5,25 @@ const { __ } = wp.i18n
|
||||||
const NAME = '<wordpress-name>'
|
const NAME = '<wordpress-name>'
|
||||||
|
|
||||||
export default ({ attributes }) => {
|
export default ({ attributes }) => {
|
||||||
const blockProps = useBlockProps.save()
|
const blockProps = useBlockProps.save({
|
||||||
|
className: NAME + '_events-list',
|
||||||
|
})
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={NAME + '_events-list'}
|
|
||||||
data-maximum={attributes.eventsCount}
|
data-maximum={attributes.eventsCount}
|
||||||
data-group-name={attributes.groupName}
|
data-group-name={attributes.groupName}
|
||||||
{...blockProps}
|
{...blockProps}
|
||||||
>
|
>
|
||||||
<div style={{ display: 'none' }}>
|
<div className="general-error" style={{ display: 'none' }}>
|
||||||
{__('The events could not be loaded!', '<wordpress-name>')}
|
{__('The events could not be loaded!', '<wordpress-name>')}
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: 'none' }}>
|
<div className="group-not-found" style={{ display: 'none' }}>
|
||||||
{__('The group could not be found!', '<wordpress-name>')}
|
{__('The group could not be found!', '<wordpress-name>')}
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<div className="loading-indicator" style={{ display: 'none' }}>
|
||||||
<li>{__('Loading...', '<wordpress-name>')}</li>
|
{__('Loading...', '<wordpress-name>')}
|
||||||
</ul>
|
</div>
|
||||||
|
<ul></ul>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,18 +16,24 @@ test.before(() => {
|
||||||
|
|
||||||
test.beforeEach((t) => {
|
test.beforeEach((t) => {
|
||||||
t.context.container = document.createElement('div')
|
t.context.container = document.createElement('div')
|
||||||
|
t.context.container.setAttribute('data-maximum', '2')
|
||||||
|
|
||||||
const errorMessageGroupNotFound = document.createElement('div')
|
|
||||||
errorMessageGroupNotFound.setAttribute('style', 'display: none;')
|
|
||||||
t.context.container.appendChild(errorMessageGroupNotFound)
|
|
||||||
const errorMessageGeneral = document.createElement('div')
|
const errorMessageGeneral = document.createElement('div')
|
||||||
|
errorMessageGeneral.setAttribute('class', 'general-error')
|
||||||
errorMessageGeneral.setAttribute('style', 'display: none;')
|
errorMessageGeneral.setAttribute('style', 'display: none;')
|
||||||
t.context.container.appendChild(errorMessageGeneral)
|
t.context.container.appendChild(errorMessageGeneral)
|
||||||
|
|
||||||
|
const errorMessageGroupNotFound = document.createElement('div')
|
||||||
|
errorMessageGroupNotFound.setAttribute('class', 'group-not-found')
|
||||||
|
errorMessageGroupNotFound.setAttribute('style', 'display: none;')
|
||||||
|
t.context.container.appendChild(errorMessageGroupNotFound)
|
||||||
|
|
||||||
|
const loadingIndicator = document.createElement('div')
|
||||||
|
loadingIndicator.setAttribute('class', 'loading-indicator')
|
||||||
|
loadingIndicator.setAttribute('style', 'display: none;')
|
||||||
|
t.context.container.appendChild(loadingIndicator)
|
||||||
|
|
||||||
const list = document.createElement('ul')
|
const list = document.createElement('ul')
|
||||||
list.setAttribute('data-maximum', '2')
|
|
||||||
const loadingMessage = document.createElement('li')
|
|
||||||
list.appendChild(loadingMessage)
|
|
||||||
t.context.container.appendChild(list)
|
t.context.container.appendChild(list)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -65,7 +71,7 @@ test.skip('#displayEvents one event', (t) => {
|
||||||
|
|
||||||
test('#displayErrorMessage no list entries shown', (t) => {
|
test('#displayErrorMessage no list entries shown', (t) => {
|
||||||
const container = t.context.container
|
const container = t.context.container
|
||||||
const list = container.children[2]
|
const list = container.children[3]
|
||||||
displayErrorMessage({ data: '', container })
|
displayErrorMessage({ data: '', container })
|
||||||
t.is(list.children.length, 0)
|
t.is(list.children.length, 0)
|
||||||
})
|
})
|
||||||
|
@ -75,6 +81,7 @@ test('#displayErrorMessage error message display', (t) => {
|
||||||
displayErrorMessage({ data: '', container })
|
displayErrorMessage({ data: '', container })
|
||||||
t.is(container.children[0].style.display, 'block')
|
t.is(container.children[0].style.display, 'block')
|
||||||
t.is(container.children[1].style.display, 'none')
|
t.is(container.children[1].style.display, 'none')
|
||||||
|
t.is(container.children[2].style.display, 'none')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('#displayErrorMessage group not found error message display', (t) => {
|
test('#displayErrorMessage group not found error message display', (t) => {
|
||||||
|
@ -91,4 +98,5 @@ test('#displayErrorMessage group not found error message display', (t) => {
|
||||||
displayErrorMessage({ data, container })
|
displayErrorMessage({ data, container })
|
||||||
t.is(container.children[0].style.display, 'none')
|
t.is(container.children[0].style.display, 'none')
|
||||||
t.is(container.children[1].style.display, 'block')
|
t.is(container.children[1].style.display, 'block')
|
||||||
|
t.is(container.children[2].style.display, 'none')
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
import Formatter from './formatter.js'
|
import Formatter from './formatter.js'
|
||||||
import { createAnchorElement } from './html-creator.js'
|
import { createAnchorElement } from './html-creator.js'
|
||||||
|
|
||||||
function removeLoadingMessageOrPreviousEvents(container) {
|
export function clearEventsList(container) {
|
||||||
const list = container.querySelector('ul')
|
const list = container.querySelector('ul')
|
||||||
list.replaceChildren()
|
list.replaceChildren()
|
||||||
}
|
}
|
||||||
|
|
||||||
export function displayEvents({ data, document, container }) {
|
export function displayEvents({ data, document, container }) {
|
||||||
removeLoadingMessageOrPreviousEvents(container)
|
hideLoadingIndicator(container)
|
||||||
|
|
||||||
const isShortOffsetNameShown = SETTINGS.isShortOffsetNameShown
|
const isShortOffsetNameShown = SETTINGS.isShortOffsetNameShown
|
||||||
const locale = SETTINGS.locale
|
const locale = SETTINGS.locale
|
||||||
|
@ -61,7 +61,7 @@ export function displayEvents({ data, document, container }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function displayErrorMessage({ data, container }) {
|
export function displayErrorMessage({ data, container }) {
|
||||||
removeLoadingMessageOrPreviousEvents(container)
|
hideLoadingIndicator(container)
|
||||||
console.error(data)
|
console.error(data)
|
||||||
if (
|
if (
|
||||||
Object.prototype.hasOwnProperty.call(data, 'response') &&
|
Object.prototype.hasOwnProperty.call(data, 'response') &&
|
||||||
|
@ -70,8 +70,20 @@ export function displayErrorMessage({ data, container }) {
|
||||||
Object.prototype.hasOwnProperty.call(data.response.errors[0], 'code') &&
|
Object.prototype.hasOwnProperty.call(data.response.errors[0], 'code') &&
|
||||||
data.response.errors[0].code === 'group_not_found'
|
data.response.errors[0].code === 'group_not_found'
|
||||||
) {
|
) {
|
||||||
container.children[1].style.display = 'block'
|
const message = container.querySelector('.group-not-found')
|
||||||
|
message.style.display = 'block'
|
||||||
} else {
|
} else {
|
||||||
container.children[0].style.display = 'block'
|
const message = container.querySelector('.general-error')
|
||||||
|
message.style.display = 'block'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function showLoadingIndicator(container) {
|
||||||
|
const indicator = container.querySelector('.loading-indicator')
|
||||||
|
indicator.style.display = 'block'
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideLoadingIndicator(container) {
|
||||||
|
const indicator = container.querySelector('.loading-indicator')
|
||||||
|
indicator.style.display = 'none'
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
import { displayEvents, displayErrorMessage } from './events-displayer.js'
|
import {
|
||||||
|
clearEventsList,
|
||||||
|
displayEvents,
|
||||||
|
displayErrorMessage,
|
||||||
|
showLoadingIndicator,
|
||||||
|
} from './events-displayer.js'
|
||||||
import * as GraphqlWrapper from './graphql-wrapper.js'
|
import * as GraphqlWrapper from './graphql-wrapper.js'
|
||||||
|
|
||||||
const NAME = '<wordpress-name>'
|
const NAME = '<wordpress-name>'
|
||||||
|
@ -17,6 +22,8 @@ export function loadEventList(container) {
|
||||||
const url = SETTINGS.url + URL_SUFFIX
|
const url = SETTINGS.url + URL_SUFFIX
|
||||||
const limit = parseInt(container.getAttribute('data-maximum'))
|
const limit = parseInt(container.getAttribute('data-maximum'))
|
||||||
const groupName = container.getAttribute('data-group-name')
|
const groupName = container.getAttribute('data-group-name')
|
||||||
|
clearEventsList(container)
|
||||||
|
showLoadingIndicator(container)
|
||||||
if (groupName) {
|
if (groupName) {
|
||||||
GraphqlWrapper.getUpcomingEventsByGroupName({ url, limit, groupName })
|
GraphqlWrapper.getUpcomingEventsByGroupName({ url, limit, groupName })
|
||||||
.then((data) => displayEvents({ data, document, container }))
|
.then((data) => displayEvents({ data, document, container }))
|
||||||
|
|
|
@ -7,9 +7,8 @@ if (!defined('ABSPATH')) {
|
||||||
<div class="<?php echo esc_attr($classNamePrefix); ?>_events-list"
|
<div class="<?php echo esc_attr($classNamePrefix); ?>_events-list"
|
||||||
data-maximum="<?php echo esc_attr($eventsCount); ?>"
|
data-maximum="<?php echo esc_attr($eventsCount); ?>"
|
||||||
data-group-name="<?php echo esc_attr($groupName); ?>">
|
data-group-name="<?php echo esc_attr($groupName); ?>">
|
||||||
<div style="display: none;"><?php esc_html_e('The events could not be loaded!', 'connector-mobilizon'); ?></div>
|
<div class="general-error" style="display: none;"><?php esc_html_e('The events could not be loaded!', 'connector-mobilizon'); ?></div>
|
||||||
<div style="display: none;"><?php esc_html_e('The group could not be found!', 'connector-mobilizon'); ?></div>
|
<div class="group-not-found" style="display: none;"><?php esc_html_e('The group could not be found!', 'connector-mobilizon'); ?></div>
|
||||||
<ul>
|
<div class="loading-indicator" style="display: none;"><?php esc_html_e('Loading...', 'connector-mobilizon'); ?></div>
|
||||||
<li><?php esc_html_e('Loading...', 'connector-mobilizon'); ?></li>
|
<ul></ul>
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue