Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor review tab for the create VM wizard #4983

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
2296566
Deprecate form-field-review-context
pcbailey Apr 6, 2020
74bd0c5
Create new general settings review view
pcbailey Apr 7, 2020
37a1dee
Move and refactor getOS function
pcbailey Apr 15, 2020
92eb887
Other updates to review tab
pcbailey Apr 15, 2020
c92094f
Remove FlavorRow
pcbailey Apr 16, 2020
31bc9a1
Fix grid settings
pcbailey Apr 16, 2020
9a1cc45
Implement initial advanced section
pcbailey Apr 16, 2020
c4daf0a
Review tab - switch over to sections in review-tab
pcbailey Apr 16, 2020
9e5a839
Review tab - switch grid to definition list in general-tab
pcbailey Apr 16, 2020
22827d6
Review tab - Move getOS function to new file
pcbailey Apr 16, 2020
501a24f
Review tab - switch grid to definition list in advanced-tab
pcbailey Apr 16, 2020
b14ff87
Review tab - Move getFlavorValue function to utils
pcbailey Apr 16, 2020
fc92df3
Review tab - Remove unused CSS classes and fixed section classnames
pcbailey Apr 16, 2020
c7a14fb
Review tab - Move Start VM checkbox to separate component
pcbailey Apr 16, 2020
e2df5cb
Add gridBreakPoint prop to networking table
pcbailey Apr 16, 2020
ee755fa
Review tab - changed storage table headers to match storage tab
pcbailey Apr 16, 2020
d4529ab
Fix selectors in vm-template-wrapper
pcbailey Apr 16, 2020
77874d2
Review tab - Remove fieldType in general tab
pcbailey Apr 16, 2020
f6cc3a3
Review tab - Create selector for field values in getFlavorValue
pcbailey Apr 17, 2020
7d69a0b
Review tab - Move getFlavorText and refactor getFlavorValue
pcbailey Apr 17, 2020
dc79327
Review tab - Return display for OS is value is undefined
pcbailey Apr 17, 2020
ec5573f
Review tab - Hide source field during import
pcbailey Apr 17, 2020
ac11899
Review tab - Add gridBreakPoint to tables
pcbailey Apr 17, 2020
d4d427d
Review tab - Fix Start VM checkbox styling
pcbailey Apr 17, 2020
73e9428
Review tab - Add provision source key
pcbailey Apr 17, 2020
bc4b1ea
Review tab - Fix cloudinit detection
pcbailey Apr 17, 2020
b0d4c47
Review tab - Fix getFlavorValue and related issues
pcbailey Apr 17, 2020
ee18e15
Review tab - Fix networking table column ordering
pcbailey Apr 17, 2020
534bb38
Review tab - Cleanup getOS call
pcbailey Apr 17, 2020
963c956
Review tab - Fix getCPU & getMemory calls in getFlavorValue
pcbailey Apr 17, 2020
dfdf003
Review tab - Add empty state to network and storage sections
pcbailey Apr 17, 2020
f93080d
Review tab - Drop 'Mode' from Access Mode header in storage section
pcbailey Apr 17, 2020
7a9a17c
Correct prettier errors
pcbailey Apr 17, 2020
c085d0a
Review tab - Show empty text when field is missing
pcbailey Apr 17, 2020
82da08b
Review tab - Use media query var for min-width
pcbailey Apr 17, 2020
a85290e
Review tab - Modify empty text message
pcbailey Apr 17, 2020
e3fce54
Review tab - Correct getOS call in general tab
pcbailey Apr 17, 2020
6a63d96
Review tab - Clean up empty state in storage and networking sections
pcbailey Apr 17, 2020
72f6b58
Review tab - Fix wizard content styles
pcbailey Apr 17, 2020
57b6dc2
Review tab - Fix empty state in storage section
pcbailey Apr 17, 2020
a173d07
Review tab - Change empty state styles
pcbailey Apr 17, 2020
f4fa433
Review tab - Fix prettier errors
pcbailey Apr 17, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
flex-flow: wrap
}

.kubevirt-create-vm-modal__wizard-content .pf-c-wizard__main-body {
display: flex;
height: 100%;
flex-direction: column;
padding-bottom: 0;
}

.pf-c-wizard__outer-wrap {
min-height: inherit;
}
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.kubevirt-create-vm-modal__form-field-review-row {
margin-bottom: var(--pf-global--spacer--sm);
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import * as React from 'react';
import { getFieldTitle } from '../utils/renderable-field-utils';
import { iGetFieldValue } from '../selectors/immutable/field';
import { iGet } from '../../../utils/immutable';
import { getCheckboxReadableValue } from '../../../utils/strings';
import { FormFieldType } from './form-field';
import { getReviewValue } from '../tabs/review-tab/utils';

import './form-field-review-row.scss';

type FormFieldReviewRowProps = {
field: any;
fieldType: FormFieldType;
fieldType?: FormFieldType;
value?: any;
};

export const FormFieldReviewRow: React.FC<FormFieldReviewRowProps> = ({ fieldType, field }) => {
export const FormFieldReviewRow: React.FC<FormFieldReviewRowProps> = ({
fieldType,
field,
value = undefined,
}) => {
const fieldKey = iGet(field, 'key');
const value = iGetFieldValue(field);
const reviewValue = [FormFieldType.CHECKBOX, FormFieldType.INLINE_CHECKBOX].includes(fieldType)
? getCheckboxReadableValue(value)
: value;
if (!reviewValue) {
return null;
}
const fieldTitle = getFieldTitle(fieldKey);
const reviewValue = value || getReviewValue(field, fieldType) || (
<span className="text-secondary">{`No ${fieldTitle.toLowerCase()}`}</span>
);

return (
<>
<dt>{getFieldTitle(fieldKey)}</dt>
<dt>{fieldTitle}</dt>
<dd>{reviewValue}</dd>
</>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import { iGet, iGetIn, iGetIsLoaded } from '../../../utils/immutable';
import { FormRow } from '../../form/form-row';
import { FormFieldContext } from './form-field-context';
import { FormFieldType } from './form-field';
import { FormFieldReviewContext } from './form-field-review-context';
import { FormFieldReviewMemoRow, FormFieldReviewRow } from './form-field-review-row';

const isLoading = (loadingResources?: { [k: string]: any }) =>
loadingResources &&
Expand Down Expand Up @@ -73,29 +71,19 @@ export const FormFieldRow: React.FC<FieldFormRowProps> = ({
if (!field || !fieldKey || isFieldHidden(field)) {
return null;
}
const Component = memoize ? FormFieldInnerMemoRow : FormFieldInnerRow;

return (
<FormFieldReviewContext.Consumer>
{({ isReview }: { isReview: boolean }) => {
if (isReview) {
const Component = memoize ? FormFieldReviewMemoRow : FormFieldReviewRow;
return <Component key="review" field={field} fieldType={fieldType} />;
}
const Component = memoize ? FormFieldInnerMemoRow : FormFieldInnerRow;
return (
<Component
key="main"
field={field}
fieldType={fieldType}
fieldHelp={fieldHelp}
loadingResources={loadingResources}
validation={validation}
>
{children}
</Component>
);
}}
</FormFieldReviewContext.Consumer>
<Component
key="main"
field={field}
fieldType={fieldType}
fieldHelp={fieldHelp}
loadingResources={loadingResources}
validation={validation}
>
{children}
</Component>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Map as ImmutableMap } from 'immutable';
import { TemplateKind } from '@console/internal/module/k8s';
import { ITemplate } from '../../../types/template';
import { getTemplateOperatingSystems } from '../../../selectors/vm-template/advanced';
import { concatImmutableLists, immutableListToShallowJS } from '../../../utils/immutable';
import { operatingSystemsNative } from '../native/consts';

export const getOS = ({ osID, iUserTemplates, openshiftFlag, iCommonTemplates }: GetOSParams) => {
const operatingSystems = openshiftFlag
? getTemplateOperatingSystems(
immutableListToShallowJS<TemplateKind>(
concatImmutableLists(iUserTemplates, iCommonTemplates),
),
)
: operatingSystemsNative;

return {
osID,
osName: (operatingSystems.find(({ id }) => id === osID) || {})?.name,
};
};

type GetOSParams = {
osID: string;
iUserTemplates: ImmutableMap<string, ITemplate>;
iCommonTemplates: ImmutableMap<string, ITemplate>;
openshiftFlag: boolean;
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as React from 'react';
import { FormSelect, FormSelectOption } from '@patternfly/react-core';
import { Form, FormSelect, FormSelectOption } from '@patternfly/react-core';
import { connect } from 'react-redux';
import { iGet, iGetIn, immutableListToShallowJS } from '../../../../utils/immutable';
import { FormFieldMemoRow } from '../../form/form-field-row';
Expand All @@ -9,7 +9,6 @@ import { vmWizardActions } from '../../redux/actions';
import { ImportProviderRenderableField, ImportProvidersField, VMImportProvider } from '../../types';
import { ActionType } from '../../redux/types';
import { getPlaceholder } from '../../utils/renderable-field-utils';
import { FormFieldForm } from '../../form/form-field-form';
import { VMWareImportProvider } from './providers/vmware-import-provider/vmware-import-provider';
import { iGetImportProviders } from '../../selectors/immutable/import-providers';
import { OvirtImportProvider } from './providers/ovirt-import-provider/ovirt-import-provider';
Expand All @@ -29,7 +28,7 @@ class ImportProvidersTabComponent extends React.Component<ImportProvidersTabComp
const { wizardReduxID } = this.props;

return (
<FormFieldForm>
<Form>
<FormFieldMemoRow
key={ImportProvidersField.PROVIDER}
field={this.getField(ImportProvidersField.PROVIDER)}
Expand All @@ -51,7 +50,7 @@ class ImportProvidersTabComponent extends React.Component<ImportProvidersTabComp
</FormFieldMemoRow>
<OvirtImportProvider key={VMImportProvider.OVIRT} wizardReduxID={wizardReduxID} />
<VMWareImportProvider key={VMImportProvider.VMWARE} wizardReduxID={wizardReduxID} />
</FormFieldForm>
</Form>
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import * as React from 'react';
import { connect } from 'react-redux';
import { getBooleanAsEnabledValue } from '../../../../utils/strings';
import { iGetCloudInitNoCloudStorage } from '../../selectors/immutable/storage';

import './review-tab.scss';

const AdvancedReviewConnected: React.FC<AdvancedReviewConnectedProps> = (props) => {
const { cloudInitEnabled } = props;

const cloudInitEnabledValue = getBooleanAsEnabledValue(cloudInitEnabled);

return (
<dl className="kubevirt-create-vm-modal__review-tab__data-list">
<dt>Cloud Init</dt>
<dd>{cloudInitEnabledValue}</dd>
</dl>
);
};

type AdvancedReviewConnectedProps = {
cloudInitEnabled: boolean;
};

const stateToProps = (state, { wizardReduxID }) => ({
cloudInitEnabled: !!iGetCloudInitNoCloudStorage(state, wizardReduxID),
});

export const AdvancedReviewTab = connect(stateToProps)(AdvancedReviewConnected);
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import * as React from 'react';
import { connect } from 'react-redux';
import classNames from 'classnames';
import {
iGetRelevantTemplateSelectors,
iGetVmSettings,
} from '../../selectors/immutable/vm-settings';
import { VMSettingsField, VMWizardProps } from '../../types';
import { FormFieldReviewMemoRow } from '../../form/form-field-review-row';
import { iGetCommonData, iGetLoadedCommonData } from '../../selectors/immutable/selectors';
import { getField, getFieldValue, getFlavorValue } from './utils';
import { getOS } from '../../selectors/combined';

import './review-tab.scss';

const GeneralReviewConnected: React.FC<GeneralReviewConnectedProps> = (props) => {
const {
iVMSettings,
iUserTemplates,
iCommonTemplates,
openshiftFlag,
relevantOptions,
isImport,
className,
} = props;

const flavorValue = getFlavorValue({
iVMSettings,
iUserTemplates,
iCommonTemplates,
relevantOptions,
});

const osName =
pcbailey marked this conversation as resolved.
Show resolved Hide resolved
getOS({
osID: getFieldValue(iVMSettings, VMSettingsField.OPERATING_SYSTEM),
iUserTemplates,
openshiftFlag,
iCommonTemplates,
})?.osName || getField(VMSettingsField.OPERATING_SYSTEM, iVMSettings)?.get('display');

return (
<dl className={classNames('kubevirt-create-vm-modal__review-tab__data-list', className)}>
<FormFieldReviewMemoRow field={getField(VMSettingsField.NAME, iVMSettings)} />

<FormFieldReviewMemoRow field={getField(VMSettingsField.DESCRIPTION, iVMSettings)} />
pcbailey marked this conversation as resolved.
Show resolved Hide resolved

{!isImport && (
<FormFieldReviewMemoRow
pcbailey marked this conversation as resolved.
Show resolved Hide resolved
key={VMSettingsField.PROVISION_SOURCE_TYPE}
field={getField(VMSettingsField.PROVISION_SOURCE_TYPE, iVMSettings)}
/>
)}

<FormFieldReviewMemoRow
pcbailey marked this conversation as resolved.
Show resolved Hide resolved
field={getField(VMSettingsField.OPERATING_SYSTEM, iVMSettings)}
value={osName}
/>

<FormFieldReviewMemoRow
field={getField(VMSettingsField.FLAVOR, iVMSettings)}
value={flavorValue}
/>

<FormFieldReviewMemoRow field={getField(VMSettingsField.WORKLOAD_PROFILE, iVMSettings)} />
</dl>
);
};

type GeneralReviewConnectedProps = {
iVMSettings: any;
openshiftFlag: boolean;
iCommonTemplates: any;
iUserTemplates: any;
relevantOptions: any;
isImport: boolean;
className: string;
};

const stateToProps = (state, { wizardReduxID }) => ({
iVMSettings: iGetVmSettings(state, wizardReduxID),
openshiftFlag: iGetCommonData(state, wizardReduxID, VMWizardProps.openshiftFlag),
iCommonTemplates: iGetLoadedCommonData(state, wizardReduxID, VMWizardProps.commonTemplates),
iUserTemplates: iGetLoadedCommonData(state, wizardReduxID, VMWizardProps.userTemplates),
relevantOptions: iGetRelevantTemplateSelectors(state, wizardReduxID),
isImport: iGetCommonData(state, wizardReduxID, VMWizardProps.isProviderImport),
});

export const GeneralReview = connect(stateToProps)(GeneralReviewConnected);