2021-07-28 13:37:34 +00:00
|
|
|
import React from "react";
|
2021-06-29 12:27:46 +00:00
|
|
|
import PropTypes from "prop-types";
|
|
|
|
import { ReactSVG } from "react-svg";
|
|
|
|
|
|
|
|
import { StyledViewSelector, IconWrapper } from "./styled-view-selector";
|
2021-11-30 09:28:01 +00:00
|
|
|
import { useTranslation } from "react-i18next";
|
2021-06-29 12:27:46 +00:00
|
|
|
|
|
|
|
const ViewSelector = ({
|
|
|
|
isDisabled,
|
|
|
|
viewSettings,
|
|
|
|
viewAs,
|
|
|
|
onChangeView,
|
|
|
|
...rest
|
|
|
|
}) => {
|
|
|
|
const onChangeViewHandler = (e) => {
|
|
|
|
if (isDisabled) return;
|
|
|
|
const el = e.target.closest(".view-selector-icon");
|
|
|
|
|
|
|
|
const view = el.dataset.view;
|
2021-07-28 13:37:34 +00:00
|
|
|
if (view !== viewAs) {
|
2021-06-29 12:48:17 +00:00
|
|
|
const option = viewSettings.find((setting) => view === setting.value);
|
2021-06-29 12:27:46 +00:00
|
|
|
option.callback && option.callback();
|
|
|
|
onChangeView(view);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const lastIndx = viewSettings && viewSettings.length - 1;
|
|
|
|
|
2022-01-21 08:49:16 +00:00
|
|
|
const { t } = useTranslation("Common");
|
2021-11-30 09:28:01 +00:00
|
|
|
|
2021-06-29 12:27:46 +00:00
|
|
|
return (
|
|
|
|
<StyledViewSelector
|
|
|
|
{...rest}
|
|
|
|
isDisabled={isDisabled}
|
|
|
|
onClick={onChangeViewHandler}
|
2021-06-29 19:02:12 +00:00
|
|
|
countItems={viewSettings.length}
|
2021-06-29 12:27:46 +00:00
|
|
|
>
|
|
|
|
{viewSettings &&
|
|
|
|
viewSettings.map((el, indx) => {
|
2021-06-29 12:48:17 +00:00
|
|
|
const { value, icon } = el;
|
2021-06-29 12:27:46 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<IconWrapper
|
|
|
|
isDisabled={isDisabled}
|
2021-07-28 13:37:34 +00:00
|
|
|
isChecked={viewAs === value}
|
2021-06-29 12:27:46 +00:00
|
|
|
firstItem={indx === 0}
|
|
|
|
lastItem={indx === lastIndx}
|
2021-06-29 12:48:17 +00:00
|
|
|
key={value}
|
2021-06-29 12:27:46 +00:00
|
|
|
className="view-selector-icon"
|
2021-06-29 12:48:17 +00:00
|
|
|
data-view={value}
|
2021-11-30 09:28:01 +00:00
|
|
|
title={
|
|
|
|
value === "row"
|
2022-01-21 08:49:16 +00:00
|
|
|
? t("Common:SwitchViewToCompact")
|
|
|
|
: t("Common:SwitchToThumbnails")
|
2021-11-30 09:28:01 +00:00
|
|
|
}
|
2021-06-29 12:27:46 +00:00
|
|
|
>
|
2022-03-17 12:16:44 +00:00
|
|
|
<ReactSVG src={icon} />
|
2021-06-29 12:27:46 +00:00
|
|
|
</IconWrapper>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</StyledViewSelector>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
ViewSelector.propTypes = {
|
|
|
|
/* Disables the button default functionality */
|
|
|
|
isDisabled: PropTypes.bool,
|
|
|
|
/* The event triggered when the button is clicked */
|
|
|
|
onChangeView: PropTypes.func,
|
|
|
|
/* Object containing view settings */
|
|
|
|
viewSettings: PropTypes.arrayOf(PropTypes.object).isRequired,
|
|
|
|
/* Current application view */
|
|
|
|
viewAs: PropTypes.string.isRequired,
|
|
|
|
};
|
|
|
|
|
|
|
|
export default ViewSelector;
|