@airtable/blocks/ui#useViewport JavaScript Examples
The following examples show how to use
@airtable/blocks/ui#useViewport.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: SvgPanZoomWrapper.js From apps-base-schema with MIT License | 6 votes |
/**
* Wraps children in a context provider for the `svgPanZoom` instance.
*
* The `svgPanZoom` instance can't be instantiated until after the first render, because it needs
* the root SVG element to exist in the DOM.
*
* @param {Element} props.children
*/
export default function SvgPanZoomWrapper({children}) {
const [svgPanZoomInstance, setSvgPanZoomInstance] = useState(null);
const viewport = useViewport();
useEffect(() => {
if (svgPanZoomInstance) {
svgPanZoomInstance.resize();
svgPanZoomInstance.fit();
svgPanZoomInstance.center();
}
}, [svgPanZoomInstance, viewport.isFullscreen]);
useEffect(() => {
const panZoom = svgPanZoom('#root', {
zoomScaleSensitivity: 0.04,
minZoom: 0.2,
maxZoom: 40,
center: true,
fit: true,
dblClickZoomEnabled: false,
});
setSvgPanZoomInstance(panZoom);
return () => panZoom.destroy();
}, []);
return (
<SvgPanZoomContext.Provider value={svgPanZoomInstance}>
{children}
</SvgPanZoomContext.Provider>
);
}
Example #2
Source File: index.js From blocks-usa-map with MIT License | 4 votes |
function USAMapBlock() {
const [isShowingSettings, setIsShowingSettings] = useState(false);
const [selectedState, setSelectedState] = useState(null);
useSettingsButton(function() {
setIsShowingSettings(!isShowingSettings);
});
const viewport = useViewport();
const base = useBase();
const globalConfig = useGlobalConfig();
const tableId = globalConfig.get('selectedTableId');
const stateFieldId = globalConfig.get('selectedStateFieldId');
const colorFieldId = globalConfig.get('selectedColorFieldId');
const table = base.getTableByIdIfExists(tableId);
const stateField = table ? table.getFieldByIdIfExists(stateFieldId) : null;
const colorField = table ? table.getFieldByIdIfExists(colorFieldId) : null;
// if (table == null || stateField == null || colorField == null) {
// setIsShowingSettings(true);
// }
const records = useRecords(stateField ? table : null);
let mapData = null;
if (stateField !== null && colorField !== null) {
mapData = getMapData(records, stateField, colorField);
}
const mapHandler = (event) => {
setSelectedState(event.target.dataset.name);
};
// If settings is showing, draw settings only
if (isShowingSettings) {
return (
<Box padding={3} display="flex">
<FormField
label="Table"
description="Choose the table you want to your State data to come from."
padding={1}
marginBottom={0}
>
<TablePickerSynced globalConfigKey="selectedTableId" />
</FormField>
<FormField
label="State Field"
description='The State field will select a state by either abbreviation ("NJ") or name ("New Jersey")'
marginBottom={0}
padding={1}
>
<FieldPickerSynced
table={table}
globalConfigKey="selectedStateFieldId"
placeholder="Pick a 'state' field..."
allowedTypes={[FieldType.SINGLE_LINE_TEXT, FieldType.SINGLE_SELECT, FieldType.MULTIPLE_RECORD_LINKS, FieldType.MULTIPLE_LOOKUP_VALUES]}
/>
</FormField>
<FormField
label="Color Field"
marginBottom={0}
description="Choose the state color using either a text field which describes the color name, or a single select."
padding={1}
>
<FieldPickerSynced
table={table}
globalConfigKey="selectedColorFieldId"
placeholder="Pick a 'color' field..."
allowedTypes={[FieldType.SINGLE_LINE_TEXT, FieldType.SINGLE_SELECT, FieldType.MULTIPLE_LOOKUP_VALUES, FieldType.NUMBER]}
/>
{colorField != null && colorField.type === FieldType.NUMBER &&
<text>You have selected a numeric type; state colors will be normalized to the maximum value in your field.</text>
}
</FormField>
</Box>
)
}
// otherwise draw the map.
return (
<div>
<Box border="default"
backgroundColor="lightGray1"
// padding={}
>
{/* TODO Allow selected state to show a column of data. */}
{/* {selectedState
? <SelectedState selected={selectedState}/>
: <div>Click to select a state</div>
} */}
<USAMap
title="USA USA USA"
width={viewport.size.width}
height={viewport.size.height - 5}
customize={mapData}
onClick={mapHandler}
/>
</Box>
</div>
)
}