= ['instances', 'highlight'];
if (propsKeys.some((key) => this.props[key] !== nextProps[key])) {
return true;
}
if (this.state.detailsInstanceId !== nextState.detailsInstanceId) {
const ids = nextProps.instances.map((x) => x.id);
if (ids.includes(this.state.detailsInstanceId) || ids.includes(nextState.detailsInstanceId)) {
return true;
}
}
return false;
}
private handleInstanceClicked = (instance: IInstance) => {
const { router, uiview } = this.props;
const params = { instanceId: instance.id, provider: instance.cloudProvider || instance.provider };
const options = { relative: uiview.context };
router.stateService.go('.instanceDetails', params, options);
};
private partitionInstances(): IInstance[][] {
const partitions: IInstance[][] = [];
const instances = (this.props.instances || []).sort(
(a, b) => a.launchTime - b.launchTime || a.id.localeCompare(b.id),
);
if (!instances.length) {
return partitions;
}
let currentPartition: IInstance[] = [];
let currentState = instances[0].healthState;
instances.forEach((i) => {
if (i.healthState !== currentState) {
partitions.push(currentPartition);
currentPartition = [];
}
currentPartition.push(i);
currentState = i.healthState;
});
partitions.push(currentPartition);
return partitions;
}
public render() {
const partitions = this.partitionInstances();
return (
{partitions.map((p, i) => (
{p.map((instance) => (
))}
))}
);
}
}