1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-25 00:07:47 +01:00

refactor: improve constraint date formatting (#789)

* refactor: fix add constraint button text

* refactor: improve constraint date formatting

* refactor: the value, it must be
This commit is contained in:
olav 2022-03-15 13:30:45 +01:00 committed by GitHub
parent 75ca8077e3
commit a202b81344
6 changed files with 61 additions and 6 deletions

View File

@ -11,6 +11,8 @@ import ConditionallyRender from '../ConditionallyRender';
import PermissionIconButton from '../PermissionIconButton/PermissionIconButton';
import StringTruncator from '../StringTruncator/StringTruncator';
import { useStyles } from './Constraint.styles';
import { useLocationSettings } from 'hooks/useLocationSettings';
import { formatConstraintValuesOrValue } from 'component/common/Constraint/formatConstraintValue';
interface IConstraintProps {
constraint: IConstraint;
@ -29,6 +31,7 @@ const Constraint = ({
// CHANGEME - Feat: Constraint Operators
const { uiConfig } = useUiConfig();
const styles = useStyles();
const { locationSettings } = useLocationSettings();
const { projectId } = useParams<IFeatureViewParams>();
const classes = classnames(styles.constraint, {
@ -54,7 +57,10 @@ const Constraint = ({
/>
<StrategySeparator text={constraint.operator} maxWidth="none" />
<span className={styles.values}>
{constraint.values?.join(', ') ?? constraint.value}
{formatConstraintValuesOrValue(
constraint,
locationSettings
)}
</span>
</div>

View File

@ -0,0 +1,36 @@
import { IConstraint } from 'interfaces/strategy';
import { CURRENT_TIME_CONTEXT_FIELD } from 'component/common/ConstraintAccordion/ConstraintAccordionEdit/ConstraintAccordionEditHeader/ConstraintAccordionEditHeader';
import { formatDateYMDHMS } from 'utils/format-date';
import { ILocationSettings } from 'hooks/useLocationSettings';
export const formatConstraintValuesOrValue = (
constraint: IConstraint,
locationSettings: ILocationSettings
): string | undefined => {
return (
formatConstraintValues(constraint) ??
formatConstraintValue(constraint, locationSettings)
);
};
export const formatConstraintValues = (
constraint: IConstraint
): string | undefined => {
if (constraint.values && constraint.values.length > 0) {
return constraint.values.join(', ');
}
};
export const formatConstraintValue = (
constraint: IConstraint,
locationSettings: ILocationSettings
): string | undefined => {
if (
constraint.value &&
constraint.contextName === CURRENT_TIME_CONTEXT_FIELD
) {
return formatDateYMDHMS(constraint.value, locationSettings.locale);
}
return constraint.value;
};

View File

@ -31,7 +31,7 @@ const constraintOperators = allOperators.map(operator => {
return { key: operator, label: operator };
});
const CURRENT_TIME_CONTEXT_FIELD = 'currentTime';
export const CURRENT_TIME_CONTEXT_FIELD = 'currentTime';
export const ConstraintAccordionEditHeader = ({
compact,

View File

@ -8,6 +8,8 @@ import { oneOf } from '../../../../../utils/one-of';
import ConditionallyRender from '../../../ConditionallyRender';
import { useStyles } from '../../ConstraintAccordion.styles';
import { ConstraintValueSearch } from '../../ConstraintValueSearch/ConstraintValueSearch';
import { formatConstraintValue } from 'component/common/Constraint/formatConstraintValue';
import { useLocationSettings } from 'hooks/useLocationSettings';
interface IConstraintAccordionViewBodyProps {
constraint: IConstraint;
@ -17,6 +19,7 @@ export const ConstraintAccordionViewBody = ({
constraint,
}: IConstraintAccordionViewBodyProps) => {
const styles = useStyles();
const { locationSettings } = useLocationSettings();
return (
<div>
@ -46,7 +49,7 @@ export const ConstraintAccordionViewBody = ({
<div className={styles.valuesContainer}>
<MultipleValues values={constraint.values} />
<SingleValue
value={constraint.value}
value={formatConstraintValue(constraint, locationSettings)}
operator={constraint.operator}
/>
</div>
@ -65,7 +68,7 @@ const SingleValue = ({ value, operator }: ISingleValueProps) => {
return (
<div className={styles.singleValueView}>
<p className={styles.singleValueText}>Value must {operator}</p>{' '}
<p className={styles.singleValueText}>Value must be {operator}</p>{' '}
<Chip
label={
<StringTruncator

View File

@ -11,6 +11,8 @@ import { UPDATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/perm
import { useParams } from 'react-router-dom';
import { IFeatureViewParams } from 'interfaces/params';
import React from 'react';
import { formatConstraintValue } from 'component/common/Constraint/formatConstraintValue';
import { useLocationSettings } from 'hooks/useLocationSettings';
interface IConstraintAccordionViewHeaderProps {
compact: boolean;
@ -30,6 +32,7 @@ export const ConstraintAccordionViewHeader = ({
environmentId,
}: IConstraintAccordionViewHeaderProps) => {
const styles = useStyles();
const { locationSettings } = useLocationSettings();
const { projectId } = useParams<IFeatureViewParams>();
const smallScreen = useMediaQuery(`(max-width:${790}px)`);
@ -67,7 +70,14 @@ export const ConstraintAccordionViewHeader = ({
<div className={styles.headerViewValuesContainer}>
<ConditionallyRender
condition={singleValue}
show={<Chip label={constraint.value} />}
show={
<Chip
label={formatConstraintValue(
constraint,
locationSettings
)}
/>
}
elseShow={
<div className={styles.headerValuesContainer}>
<p className={styles.headerValues}>

View File

@ -96,7 +96,7 @@ export const FeatureStrategyConstraints2 = ({
environmentId={environmentId}
projectId={projectId}
>
Add constraints
Add constraint
</PermissionButton>
{strategy.constraints?.map((constraint, index) => (
<ConstraintAccordion