Skip to content
This repository was archived by the owner on Feb 24, 2023. It is now read-only.

Commit c68765a

Browse files
authored
Merge pull request #60 from scale8/fix-preview-issues
Avoid too many re-renders, fix dropdown
2 parents 8681aa6 + 3a0e626 commit c68765a

File tree

8 files changed

+46
-29
lines changed

8 files changed

+46
-29
lines changed

ui/src/components/molecules/PreviewFrameRuleHeader.tsx

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Dispatch, FC, SetStateAction } from 'react';
2-
import { Box, MenuItem, Select, SelectChangeEvent } from '@mui/material';
2+
import { Box, FormControl, MenuItem, Select, SelectChangeEvent } from '@mui/material';
33
import AppliedIcon from '../atoms/Icons/AppliedIcon';
44
import { timestampDisplay } from '../../utils/DateTimeUtils';
55
import { RuleStatus } from '../../types/PreviewFrameTypes';
@@ -52,20 +52,21 @@ const PreviewFrameRuleHeader: FC<PreviewFrameRuleHeaderProps> = (
5252
return (
5353
<Box>
5454
<Box display="flex" alignItems="center" height="56px" py={1}>
55-
<Select
56-
sx={{ width: '100%' }}
57-
value={ruleIndex.toString()}
58-
onChange={(event: SelectChangeEvent) =>
59-
setRuleIndex(parseInt(event.target.value as string))
60-
}
61-
name="rule-run"
62-
>
63-
{ruleStatuses.map((value, key) => (
64-
<MenuItem key={key} value={value.index.toString()}>
65-
<PreviewFrameRuleHeaderEntry {...props} ruleStatus={value} />
66-
</MenuItem>
67-
))}
68-
</Select>
55+
<FormControl variant="standard" sx={{ width: '100%', marginBottom: '10px' }}>
56+
<Select
57+
value={ruleIndex.toString()}
58+
onChange={(event: SelectChangeEvent) =>
59+
setRuleIndex(parseInt(event.target.value as string))
60+
}
61+
name="rule-run"
62+
>
63+
{ruleStatuses.map((value, key) => (
64+
<MenuItem key={key} value={value.index.toString()}>
65+
<PreviewFrameRuleHeaderEntry {...props} ruleStatus={value} />
66+
</MenuItem>
67+
))}
68+
</Select>
69+
</FormControl>
6970
</Box>
7071
</Box>
7172
);

ui/src/components/organisms/EnvironmentInstallInstructions.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,25 @@ const EnvironmentInstallInstructions: FC<InstallInstructionsProps> = (
2727
const domain =
2828
props.mode === Mode.COMMERCIAL
2929
? `https://${props.installDomain}`
30-
: `${window.location.protocol}//${window.location.host}`;
30+
: `${window.location.protocol}//${window.location.hostname}`;
3131

3232
const path = props.mode === Mode.COMMERCIAL ? undefined : `/edge/${props.environmentId}`;
3333

34-
const determinePort = () => {
35-
if (props.mode === Mode.COMMERCIAL) {
36-
if (getNodeEnv() === 'development') {
37-
return '8443';
38-
}
34+
const getPort = (): number | undefined => {
35+
if (window.location.port === '80' || window.location.port === '443') {
36+
return undefined;
37+
} else if (props.mode === Mode.COMMERCIAL && getNodeEnv() === 'development') {
38+
return 8443;
39+
} else if (getNodeEnv() === 'development') {
40+
return 6080;
41+
} else if (props.mode === Mode.SELF_HOSTED && getNodeEnv() === 'production') {
42+
return +window.location.port;
43+
} else {
3944
return undefined;
4045
}
41-
return undefined;
4246
};
4347

44-
const port = determinePort();
48+
const port = getPort();
4549

4650
const environmentInstallSrc = `${domain}${port === undefined ? '' : `:${port}`}${path ?? ''}`;
4751

ui/src/components/organisms/PreviewFrame/PreviewFrameDataLayers.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TabularData } from '../../molecules/TabularData';
44
import { kebabToTitleCase } from '../../../utils/TextUtils';
55
import { previewFrameContext } from '../../../context/PreviewFrameContext';
66
import { RuleVarStatus } from '../../../types/PreviewFrameTypes';
7+
import { Segment } from '@mui/icons-material';
78

89
const PreviewFrameDataLayers: FC = () => {
910
const { revisionStatus, previewFrameData } = useContext(previewFrameContext);
@@ -57,7 +58,7 @@ const PreviewFrameDataLayers: FC = () => {
5758
/>
5859
{Object.entries(ruleVarsByRuleId).map(([ruleId, ruleVars]) => {
5960
return (
60-
<>
61+
<Segment key={ruleId}>
6162
<Box mt={3} />
6263
<TabularData
6364
title={ruleTitlesMap.get(ruleId)}
@@ -66,7 +67,7 @@ const PreviewFrameDataLayers: FC = () => {
6667
_.values,
6768
])}
6869
/>
69-
</>
70+
</Segment>
7071
);
7172
})}
7273
<Box mt={3} />

ui/src/components/organisms/Sections/RulePageSection.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ const RulePageSection: FC<RuleSectionProps> = (props: RuleSectionProps) => {
5151
readonly={revisionLocked}
5252
key={rule.id}
5353
id={rule.id}
54-
title={rule.name}
54+
title={`${rule.name} (${
55+
rule.min_repeat_interval > -1 ? 'Repeatable' : 'Non-repeatable'
56+
})`}
5557
actions={[
5658
...([
5759
{

ui/src/gql/generated/TagContentPageData.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ export interface TagContentPageData_getTag_rule_groups_rules {
300300
* The name of the `Rule`
301301
*/
302302
name: string;
303+
/**
304+
* The minimum refresh interval. -1 = the rule can't repeat. 0 = the rule can
305+
* repeat. > 0 the rule must wait this many milliseconds before being allowed to repeat again.
306+
*/
307+
min_repeat_interval: number;
303308
/**
304309
* A `Trigger` attached to the `Rule`.
305310
*/

ui/src/gql/queries/PageTagContentQuery.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const PageTagContentQuery = gql`
1515
rules {
1616
id
1717
name
18+
min_repeat_interval
1819
trigger {
1920
id
2021
name

ui/src/pages/debug-frame.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { frameEventFromMessage, messageFromFrameEvent } from '../utils/FrameEven
88
import PreviewLayout from '../components/templates/PreviewLayout';
99

1010
const DebugFrame: FC = () => {
11-
const [revisionStatus, setRevisionStatus] = useState<RevisionStatus | undefined>(undefined);
11+
const [revisionStatusString, setRevisionStatusString] = useState<string | undefined>(undefined);
1212

1313
const [currentTagCode, setCurrentTagCode] = useState<TagCode | undefined>(undefined);
1414

@@ -18,6 +18,8 @@ const DebugFrame: FC = () => {
1818

1919
const [revisionTab, setRevisionTab] = useState(0);
2020

21+
const revisionStatus = revisionStatusString ? JSON.parse(revisionStatusString) : undefined;
22+
2123
const [loadPreview, { data, loading, error }] = useLazyQuery<PreviewFrameData>(
2224
PreviewFrameQuery,
2325
{
@@ -35,8 +37,8 @@ const DebugFrame: FC = () => {
3537
if (frameEvent !== null) {
3638
if (frameEvent.event === 'statusUpdate') {
3739
const receivedRevisionStatus = frameEvent.payload as RevisionStatus;
38-
setRevisionStatus(receivedRevisionStatus);
39-
40+
const receivedRevisionStatusString = JSON.stringify(receivedRevisionStatus);
41+
setRevisionStatusString(receivedRevisionStatusString);
4042
if (receivedRevisionStatus.refreshTarget) {
4143
loadPreview();
4244
}

ui/src/types/TagRulesTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export type Rule = {
6969
id: string;
7070
name: string;
7171
trigger: Trigger;
72+
min_repeat_interval: number;
7273
action_groups_distributions: ActionGroupDistribution[];
7374
is_active: boolean;
7475
};

0 commit comments

Comments
 (0)