Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ exports[`devicePropertiesPerInterface matches snapshot 1`] = `
className="list-detail pnp-properties"
>
<ResizableDetailsList
ariaLabel="deviceProperties.propertiesTableAriaLabel"
checkboxVisibility={2}
columns={
[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ export const DevicePropertiesPerInterface: React.FC<DevicePropertiesDataProps> =
items={props.twinAndSchema}
columns={getColumns()}
layoutMode={DetailsListLayoutMode.justified}
ariaLabel={t(ResourceKeys.deviceProperties.propertiesTableAriaLabel)}
/>
{showOverlay && <Overlay />}
{createReportedValuePanel()}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ exports[`components/devices/deviceSettingsPerInterface matches snapshot 1`] = `
className="pnp-detail-list pnp-properties scrollable-lg"
>
<ResizableDetailsList
ariaLabel="deviceSettings.writablePropertiesTableAriaLabel"
ariaLabelForSelectAllCheckbox="deviceSettings.columns.selectAll"
ariaLabelForSelectionColumn="deviceSettings.columns.toggleSelection"
checkButtonAriaLabel="deviceSettings.columns.rowCheckBoxAriaLabel"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ export const DeviceSettingsPerInterface: React.FC<DeviceSettingDataProps & Devic
ariaLabelForSelectAllCheckbox={t(ResourceKeys.deviceSettings.columns.selectAll)}
ariaLabelForSelectionColumn={t(ResourceKeys.deviceSettings.columns.toggleSelection)}
checkButtonAriaLabel={t(ResourceKeys.deviceSettings.columns.rowCheckBoxAriaLabel)}
ariaLabel={t(ResourceKeys.deviceSettings.writablePropertiesTableAriaLabel)}
/>
{createReportedValuePanel()}
{showOverlay && <Overlay/>}
Expand Down
7 changes: 5 additions & 2 deletions src/app/devices/shared/components/simpleReportedSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Licensed under the MIT License
**********************************************************/
import * as React from 'react';
import { Validator, ValidationError } from 'jsonschema';
import { Validator, ValidationError, ValidatorResult } from 'jsonschema';
import { Label } from '@fluentui/react';
import { useTranslation } from 'react-i18next';
import { ParsedJsonSchema } from '../../../api/models/interfaceJsonParserOutput';
Expand All @@ -13,7 +13,10 @@ import { ResourceKeys } from '../../../../localization/resourceKeys';
// tslint:disable-next-line: cyclomatic-complexity
export const RenderSimplyTypeValue = (twin: any, schema: ParsedJsonSchema, displayValue: any, desired: boolean=false) => { // tslint:disable-line:no-any
const validator = new Validator();
const result = validator.validate(twin, schema);
let result: ValidatorResult | undefined;
if((schema as any)['$id'] || (schema as any)['id']){
result = validator.validate(twin, schema);
}
const getDisplayValue = () => {
if (typeof(twin) === 'object') {
const twinCopy = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
exports[`ResizableDetailsList matches snapshot 1`] = `
<Fragment>
<StyledWithViewportComponent
ariaLabelForGrid="resizableDetailsList.defaultAriaLabel"
columns={[]}
componentRef={
{
Expand Down
10 changes: 8 additions & 2 deletions src/app/shared/resizeDetailsList/resizableDetailsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ import { ColumnActionsMode, ContextualMenu, DetailsList, IColumn, IContextualMen
import { ResizeDetailsListDialog } from './dialog';
import { ResourceKeys } from '../../../localization/resourceKeys';

export const ResizableDetailsList: React.FC<IDetailsListProps> = props => {
export interface ResizableDetailsListProps extends IDetailsListProps {
ariaLabel?: string;
}

export const ResizableDetailsList: React.FC<ResizableDetailsListProps> = props => {
const { t } = useTranslation();
const { ariaLabelForSelectionColumn, ariaLabelForSelectAllCheckbox, checkButtonAriaLabel,
items, columns, selection, selectionMode, layoutMode, checkboxVisibility, className, onRenderItemColumn } = props;
items, columns, selection, selectionMode, layoutMode, checkboxVisibility, className, onRenderItemColumn, ariaLabel, ...restProps } = props;

const [ isDialogHidden, setIsDialogHidden] = React.useState(true);
const [ contextualMenuProps, setContextualMenuProps] = React.useState<IContextualMenuProps | undefined>(undefined);
Expand Down Expand Up @@ -60,6 +64,8 @@ export const ResizableDetailsList: React.FC<IDetailsListProps> = props => {
selection={selection}
selectionMode={selectionMode}
onRenderItemColumn={onRenderItemColumn}
ariaLabelForGrid={ariaLabel || t(ResourceKeys.resizableDetailsList.defaultAriaLabel)}
{...restProps}
/>
{contextualMenuProps && <ContextualMenu {...contextualMenuProps} />}
<ResizeDetailsListDialog
Expand Down
8 changes: 3 additions & 5 deletions src/app/shared/utils/credentialStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ const CONN_STRINGS_KEY = 'connection-strings';
*/
export const storeConnectionStrings = async (value: ConnectionStringWithExpiry[]): Promise<void> => {
const serialized = JSON.stringify(value);
const credentialsApi = getCredentialsInterface();

try {
const credentialsApi = getCredentialsInterface();
const isAvailable = await credentialsApi.isEncryptionAvailable();
if (isAvailable) {
await credentialsApi.store(CONN_STRINGS_KEY, serialized);
Expand All @@ -38,9 +38,8 @@ export const storeConnectionStrings = async (value: ConnectionStringWithExpiry[]
* with automatic migration from localStorage if needed.
*/
export const getConnectionStrings = async (): Promise<ConnectionStringWithExpiry[]> => {
const credentialsApi = getCredentialsInterface();

try {
const credentialsApi = getCredentialsInterface();
const isAvailable = await credentialsApi.isEncryptionAvailable();
if (isAvailable) {
const encrypted = await credentialsApi.get(CONN_STRINGS_KEY);
Expand Down Expand Up @@ -74,9 +73,8 @@ export const getConnectionStrings = async (): Promise<ConnectionStringWithExpiry
* Delete all connection strings from storage
*/
export const deleteConnectionStrings = async (): Promise<void> => {
const credentialsApi = getCredentialsInterface();

try {
const credentialsApi = getCredentialsInterface();
await credentialsApi.delete(CONN_STRINGS_KEY);
} catch (error) {
// tslint:disable-next-line: no-console
Expand Down
7 changes: 5 additions & 2 deletions src/localization/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@
"buttons": {
"resize": "Resize",
"cancel": "Cancel"
}
},
"defaultAriaLabel": "Data table"
},
"header": {
"applicationName": "Azure IoT Explorer",
Expand Down Expand Up @@ -481,6 +482,7 @@
},
"headerText": "Read-only properties",
"noProperties": "ComponentName {{componentName}} contains no read-only property definitions",
"propertiesTableAriaLabel": "Device properties table with name, value, schema, and unit columns",
"columns": {
"name": "Name (Display Name / Description)",
"value": "Value",
Expand Down Expand Up @@ -525,7 +527,8 @@
},
"panel": {
"title": "Reported value"
}
},
"writablePropertiesTableAriaLabel": "Writable properties table with name, schema, unit, desired value, and reported value columns"
},
"deviceCommands": {
"command" : {
Expand Down
3 changes: 3 additions & 0 deletions src/localization/resourceKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,7 @@ export class ResourceKeys {
},
headerText : "deviceProperties.headerText",
noProperties : "deviceProperties.noProperties",
propertiesTableAriaLabel : "deviceProperties.propertiesTableAriaLabel",
};
public static deviceSettings = {
ackStatus : {
Expand Down Expand Up @@ -711,6 +712,7 @@ export class ResourceKeys {
panel : {
title : "deviceSettings.panel.title",
},
writablePropertiesTableAriaLabel : "deviceSettings.writablePropertiesTableAriaLabel",
};
public static deviceTwin = {
command : {
Expand Down Expand Up @@ -1008,6 +1010,7 @@ export class ResourceKeys {
subText : "resizableDetailsList.content.subText",
title : "resizableDetailsList.content.title",
},
defaultAriaLabel : "resizableDetailsList.defaultAriaLabel",
};
public static settings = {
close : "settings.close",
Expand Down
Loading