mirror of
https://gh.wpcy.net/https://github.com/elementor/one-click-accessibility.git
synced 2026-04-24 03:45:41 +08:00
* update: convert imports to named imports * add: function to check if current screen is settings page * update: rename elementor logo to app logo * add: url mismatch flow and components * update: remove obsolete code * Update modules/connect/rest/authorize.php Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * Update modules/settings/module.php Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * fix: modal was not closing * update: remove url mismatch notice * update: mismatch modal and rendering logic * add: toast notifications for errors * update: convert components into styled components * update: remove bottom border from the dialog * update: text copy * fix: logo alignment * update: renamed styled component --------- Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com>
155 lines
3.6 KiB
JavaScript
155 lines
3.6 KiB
JavaScript
import { InfoCircleIcon } from '@elementor/icons';
|
|
import Accordion from '@elementor/ui/Accordion';
|
|
import AccordionDetails from '@elementor/ui/AccordionDetails';
|
|
import AccordionSummary from '@elementor/ui/AccordionSummary';
|
|
import AccordionSummaryIcon from '@elementor/ui/AccordionSummaryIcon';
|
|
import Box from '@elementor/ui/Box';
|
|
import FormLabel from '@elementor/ui/FormLabel';
|
|
import Infotip from '@elementor/ui/Infotip';
|
|
import ListItemText from '@elementor/ui/ListItemText';
|
|
import TextField from '@elementor/ui/TextField';
|
|
import Typography from '@elementor/ui/Typography';
|
|
import { styled } from '@elementor/ui/styles';
|
|
import { useSettings } from '@ea11y/hooks';
|
|
import { eventNames, mixpanelService } from '@ea11y/services';
|
|
import { __ } from '@wordpress/i18n';
|
|
import { validateUrl } from '../../utils';
|
|
|
|
const SitemapSettings = ({ sitemap }) => {
|
|
const {
|
|
widgetMenuSettings,
|
|
setWidgetMenuSettings,
|
|
hasChanges,
|
|
setHasChanges,
|
|
hasError,
|
|
setHasError,
|
|
} = useSettings();
|
|
|
|
const onEditSitemap = (event) => {
|
|
setWidgetMenuSettings({
|
|
...widgetMenuSettings,
|
|
sitemap: {
|
|
enabled: true,
|
|
url: event.target.value,
|
|
},
|
|
});
|
|
const isValid = validateUrl(event.target.value);
|
|
|
|
setHasError({
|
|
...hasError,
|
|
sitemap: !isValid,
|
|
});
|
|
setHasChanges(isValid);
|
|
};
|
|
|
|
const onBlur = () => {
|
|
if (hasChanges) {
|
|
mixpanelService.sendEvent(eventNames.fieldContentUpdated, {
|
|
fieldName: 'sitemap-url',
|
|
value: widgetMenuSettings.sitemap?.url,
|
|
});
|
|
}
|
|
};
|
|
|
|
return (
|
|
<StyledAccordion>
|
|
<StyledAccordionSummary aria-controls="panel-content" id="panel-header">
|
|
<AccordionSummaryIcon sx={{ padding: 0 }}>
|
|
{sitemap?.icon}
|
|
</AccordionSummaryIcon>
|
|
<ListItemText
|
|
primary={sitemap?.title}
|
|
sx={{ flexGrow: 0, marginRight: 1 }}
|
|
id={`ea11y-sitemap-toggle`}
|
|
/>
|
|
</StyledAccordionSummary>
|
|
<StyledAccordionDetails>
|
|
<StyledBox>
|
|
<StyledFormLabel htmlFor="sitemap-url">
|
|
{__('Sitemap URL')}
|
|
|
|
<Infotip
|
|
content={
|
|
<Typography variant="body2" sx={{ p: 2 }}>
|
|
{__(
|
|
'You need to add a link to activate this',
|
|
'pojo-accessibility',
|
|
)}
|
|
</Typography>
|
|
}
|
|
placement="right"
|
|
arrow={true}
|
|
>
|
|
<InfoCircleIcon fontSize="small" />
|
|
</Infotip>
|
|
</StyledFormLabel>
|
|
<Box sx={{ flexGrow: 1 }}>
|
|
<StyledTextField
|
|
id="sitemap-url"
|
|
type="url"
|
|
onChange={onEditSitemap}
|
|
onBlur={onBlur}
|
|
value={widgetMenuSettings.sitemap?.url}
|
|
error={hasError.sitemap}
|
|
size="small"
|
|
variant="outlined"
|
|
/>
|
|
{hasError.sitemap && (
|
|
<Typography variant="caption" color="error">
|
|
{__('Please enter valid URL!', 'pojo-accessibility')}
|
|
</Typography>
|
|
)}
|
|
</Box>
|
|
</StyledBox>
|
|
</StyledAccordionDetails>
|
|
</StyledAccordion>
|
|
);
|
|
};
|
|
|
|
const StyledAccordion = styled(Accordion)`
|
|
border: none;
|
|
width: 100%;
|
|
`;
|
|
|
|
const StyledAccordionSummary = styled(AccordionSummary)`
|
|
padding: 0;
|
|
min-height: auto;
|
|
justify-content: left;
|
|
&.Mui-expanded {
|
|
min-height: auto;
|
|
}
|
|
|
|
& .MuiAccordionSummary-content,
|
|
& .MuiAccordionSummary-content.Mui-expanded {
|
|
margin: 0 !important;
|
|
align-items: center;
|
|
flex-grow: 0;
|
|
}
|
|
`;
|
|
|
|
const StyledBox = styled(Box)`
|
|
display: flex;
|
|
gap: 16px;
|
|
align-items: flex-start;
|
|
`;
|
|
|
|
const StyledFormLabel = styled(FormLabel)`
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
white-space: nowrap;
|
|
padding-top: 7px;
|
|
`;
|
|
|
|
const StyledTextField = styled(TextField)`
|
|
width: 100%;
|
|
input {
|
|
height: 36px;
|
|
}
|
|
`;
|
|
|
|
const StyledAccordionDetails = styled(AccordionDetails)`
|
|
padding: 5px 45px 5px 0;
|
|
`;
|
|
|
|
export default SitemapSettings;
|