@ant-design/icons#DatabaseOutlined TypeScript Examples
The following examples show how to use
@ant-design/icons#DatabaseOutlined.
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: personalizationOptions.tsx From posthog-foss with MIT License | 6 votes |
PRODUCTS: RadioSelectType[] = [
{
key: 'web',
label: 'Web App',
icon: <GlobalOutlined />,
},
{
key: 'mobile',
label: 'Mobile App',
icon: <MobileOutlined />,
},
{
key: 'website',
label: 'Website',
icon: <DesktopOutlined />,
},
{
key: 'backend',
label: 'Backend Server',
icon: <CloudServerOutlined />,
},
{
key: 'data_pipeline',
label: 'Data Pipeline',
icon: <DatabaseOutlined />,
},
]
Example #2
Source File: index.tsx From XFlow with MIT License | 6 votes |
XFlowDefaultNode: NsGraph.INodeRender = props => {
const icon = React.isValidElement(props.data.icon) ? (
props.data.icon
) : (
<DatabaseOutlined style={fontStyle} />
)
return (
<div className={`xflow-default-node ${props.isNodeTreePanel ? 'panel-node' : ''}`}>
<span className="icon">{icon}</span>
<span className="label">{props.data.label}</span>
<span className="status">
<AlgoIcon status={props.data && props.data.status} hide={props.isNodeTreePanel} />
</span>
</div>
)
}
Example #3
Source File: algo-node.tsx From XFlow with MIT License | 6 votes |
AlgoNode: NsGraph.INodeRender = props => {
return (
<div className={`xflow-algo-node ${props.isNodeTreePanel ? 'panel-node' : ''}`}>
<span className="icon">
<DatabaseOutlined style={fontStyle} />
</span>
<span className="label">{props.data.label}</span>
<span className="status">
<AlgoIcon status={props.data && props.data.status} hide={props.isNodeTreePanel} />
</span>
</div>
)
}
Example #4
Source File: index.tsx From datart with Apache License 2.0 | 5 votes |
Properties = memo(({ allowManage }: PropertiesProps) => {
const [selectedTab, setSelectedTab] = useState('');
const { editorInstance } = useContext(EditorContext);
const t = useI18NPrefix('view.properties');
useEffect(() => {
editorInstance?.layout();
}, [editorInstance, selectedTab]);
const tabTitle = useMemo(
() => [
{ name: 'reference', title: t('reference'), icon: <DatabaseOutlined /> },
{ name: 'variable', title: t('variable'), icon: <FunctionOutlined /> },
{ name: 'model', title: t('model'), icon: <ApartmentOutlined /> },
{
name: 'columnPermissions',
title: t('columnPermissions'),
icon: <SafetyCertificateOutlined />,
},
],
[t],
);
const tabSelect = useCallback(tab => {
setSelectedTab(tab);
}, []);
return allowManage ? (
<Container>
<PaneWrapper selected={selectedTab === 'variable'}>
<Variables />
</PaneWrapper>
<PaneWrapper selected={selectedTab === 'reference'}>
<Resource />
</PaneWrapper>
<PaneWrapper selected={selectedTab === 'model'}>
<DataModelTree />
</PaneWrapper>
<PaneWrapper selected={selectedTab === 'columnPermissions'}>
<ColumnPermissions />
</PaneWrapper>
<VerticalTabs tabs={tabTitle} onSelect={tabSelect} />
</Container>
) : null;
})
Example #5
Source File: commandPaletteLogic.ts From posthog-foss with MIT License | 4 votes |
commandPaletteLogic = kea<
commandPaletteLogicType<
Command,
CommandFlow,
CommandRegistrations,
CommandResult,
CommandResultDisplayable,
RegExpCommandPairs
>
>({
path: ['lib', 'components', 'CommandPalette', 'commandPaletteLogic'],
connect: {
actions: [personalAPIKeysLogic, ['createKey']],
values: [teamLogic, ['currentTeam'], userLogic, ['user']],
logic: [preflightLogic], // used in afterMount, which does not auto-connect
},
actions: {
hidePalette: true,
showPalette: true,
togglePalette: true,
setInput: (input: string) => ({ input }),
onArrowUp: true,
onArrowDown: (maxIndex: number) => ({ maxIndex }),
onMouseEnterResult: (index: number) => ({ index }),
onMouseLeaveResult: true,
executeResult: (result: CommandResult) => ({ result }),
activateFlow: (flow: CommandFlow | null) => ({ flow }),
backFlow: true,
registerCommand: (command: Command) => ({ command }),
deregisterCommand: (commandKey: string) => ({ commandKey }),
setCustomCommand: (commandKey: string) => ({ commandKey }),
deregisterScope: (scope: string) => ({ scope }),
},
reducers: {
isPaletteShown: [
false,
{
hidePalette: () => false,
showPalette: () => true,
togglePalette: (previousState) => !previousState,
},
],
keyboardResultIndex: [
0,
{
setInput: () => 0,
executeResult: () => 0,
activateFlow: () => 0,
backFlow: () => 0,
onArrowUp: (previousIndex) => (previousIndex > 0 ? previousIndex - 1 : 0),
onArrowDown: (previousIndex, { maxIndex }) => (previousIndex < maxIndex ? previousIndex + 1 : maxIndex),
},
],
hoverResultIndex: [
null as number | null,
{
activateFlow: () => null,
backFlow: () => null,
onMouseEnterResult: (_, { index }) => index,
onMouseLeaveResult: () => null,
onArrowUp: () => null,
onArrowDown: () => null,
},
],
input: [
'',
{
setInput: (_, { input }) => input,
activateFlow: () => '',
backFlow: () => '',
executeResult: () => '',
},
],
activeFlow: [
null as CommandFlow | null,
{
activateFlow: (currentFlow, { flow }) =>
flow ? { ...flow, scope: flow.scope ?? currentFlow?.scope, previousFlow: currentFlow } : null,
backFlow: (currentFlow) => currentFlow?.previousFlow ?? null,
},
],
rawCommandRegistrations: [
{} as CommandRegistrations,
{
registerCommand: (commands, { command }) => {
return { ...commands, [command.key]: command }
},
deregisterCommand: (commands, { commandKey }) => {
const { [commandKey]: _, ...cleanedCommands } = commands // eslint-disable-line
return cleanedCommands
},
},
],
},
listeners: ({ actions, values }) => ({
showPalette: () => {
posthog.capture('palette shown', { isMobile: isMobile() })
},
togglePalette: () => {
if (values.isPaletteShown) {
posthog.capture('palette shown', { isMobile: isMobile() })
}
},
executeResult: ({ result }: { result: CommandResult }) => {
if (result.executor === true) {
actions.activateFlow(null)
actions.hidePalette()
} else {
const possibleFlow = result.executor?.() || null
actions.activateFlow(possibleFlow)
if (!possibleFlow) {
actions.hidePalette()
}
}
// Capture command execution, without useless data
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { icon, index, ...cleanedResult }: Record<string, any> = result
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { resolver, ...cleanedCommand } = cleanedResult.source
cleanedResult.source = cleanedCommand
cleanedResult.isMobile = isMobile()
posthog.capture('palette command executed', cleanedResult)
},
deregisterScope: ({ scope }) => {
for (const command of Object.values(values.commandRegistrations)) {
if (command.scope === scope) {
actions.deregisterCommand(command.key)
}
}
},
setInput: async ({ input }, breakpoint) => {
await breakpoint(300)
if (input.length > 8) {
const response = await api.get('api/person/?key_identifier=' + encodeURIComponent(input))
const person = response.results[0]
if (person) {
actions.registerCommand({
key: `person-${person.distinct_ids[0]}`,
resolver: [
{
icon: UserOutlined,
display: `View person ${input}`,
executor: () => {
const { push } = router.actions
push(urls.person(person.distinct_ids[0]))
},
},
],
scope: GLOBAL_COMMAND_SCOPE,
})
}
}
},
}),
selectors: {
isSqueak: [
(selectors) => [selectors.input],
(input: string) => {
return input.trim().toLowerCase() === 'squeak'
},
],
activeResultIndex: [
(selectors) => [selectors.keyboardResultIndex, selectors.hoverResultIndex],
(keyboardResultIndex: number, hoverResultIndex: number | null) => {
return hoverResultIndex ?? keyboardResultIndex
},
],
commandRegistrations: [
(selectors) => [
selectors.rawCommandRegistrations,
dashboardsModel.selectors.nameSortedDashboards,
teamLogic.selectors.currentTeam,
],
(rawCommandRegistrations: CommandRegistrations, dashboards: DashboardType[]): CommandRegistrations => ({
...rawCommandRegistrations,
custom_dashboards: {
key: 'custom_dashboards',
resolver: dashboards.map((dashboard: DashboardType) => ({
key: `dashboard_${dashboard.id}`,
icon: LineChartOutlined,
display: `Go to Dashboard: ${dashboard.name}`,
executor: () => {
const { push } = router.actions
push(urls.dashboard(dashboard.id))
},
})),
scope: GLOBAL_COMMAND_SCOPE,
},
}),
],
regexpCommandPairs: [
(selectors) => [selectors.commandRegistrations],
(commandRegistrations: CommandRegistrations) => {
const array: RegExpCommandPairs = []
for (const command of Object.values(commandRegistrations)) {
if (command.prefixes) {
array.push([new RegExp(`^\\s*(${command.prefixes.join('|')})(?:\\s+(.*)|$)`, 'i'), command])
} else {
array.push([null, command])
}
}
return array
},
],
commandSearchResults: [
(selectors) => [
selectors.isPaletteShown,
selectors.regexpCommandPairs,
selectors.input,
selectors.activeFlow,
selectors.isSqueak,
],
(
isPaletteShown: boolean,
regexpCommandPairs: RegExpCommandPairs,
argument: string,
activeFlow: CommandFlow | null,
isSqueak: boolean
) => {
if (!isPaletteShown || isSqueak) {
return []
}
if (activeFlow) {
return resolveCommand(activeFlow, argument)
}
let directResults: CommandResult[] = []
let prefixedResults: CommandResult[] = []
for (const [regexp, command] of regexpCommandPairs) {
if (regexp) {
const match = argument.match(regexp)
if (match && match[1]) {
prefixedResults = [...prefixedResults, ...resolveCommand(command, match[2], match[1])]
}
}
directResults = [...directResults, ...resolveCommand(command, argument)]
}
const allResults = directResults.concat(prefixedResults)
let fusableResults: CommandResult[] = []
let guaranteedResults: CommandResult[] = []
for (const result of allResults) {
if (result.guarantee) {
guaranteedResults.push(result)
} else {
fusableResults.push(result)
}
}
fusableResults = uniqueBy(fusableResults, (result) => result.display)
guaranteedResults = uniqueBy(guaranteedResults, (result) => result.display)
const fusedResults = argument
? new Fuse(fusableResults, {
keys: ['display', 'synonyms'],
})
.search(argument)
.slice(0, RESULTS_MAX)
.map((result) => result.item)
: sample(fusableResults, RESULTS_MAX - guaranteedResults.length)
return guaranteedResults.concat(fusedResults)
},
],
commandSearchResultsGrouped: [
(selectors) => [selectors.commandSearchResults, selectors.activeFlow],
(commandSearchResults: CommandResult[], activeFlow: CommandFlow | null) => {
const resultsGrouped: {
[scope: string]: CommandResult[]
} = {}
if (activeFlow) {
resultsGrouped[activeFlow.scope ?? '?'] = []
}
for (const result of commandSearchResults) {
const scope: string = result.source.scope ?? '?'
if (!(scope in resultsGrouped)) {
resultsGrouped[scope] = []
} // Ensure there's an array to push to
resultsGrouped[scope].push({ ...result })
}
let rollingGroupIndex = 0
let rollingResultIndex = 0
const resultsGroupedInOrder: [string, CommandResultDisplayable[]][] = []
for (const [group, results] of Object.entries(resultsGrouped)) {
resultsGroupedInOrder.push([group, []])
for (const result of results) {
resultsGroupedInOrder[rollingGroupIndex][1].push({ ...result, index: rollingResultIndex++ })
}
rollingGroupIndex++
}
return resultsGroupedInOrder
},
],
},
events: ({ actions }) => ({
afterMount: () => {
const { push } = router.actions
const goTo: Command = {
key: 'go-to',
scope: GLOBAL_COMMAND_SCOPE,
prefixes: ['open', 'visit'],
resolver: [
{
icon: FundOutlined,
display: 'Go to Dashboards',
executor: () => {
push(urls.dashboards())
},
},
{
icon: RiseOutlined,
display: 'Go to Insights',
executor: () => {
push(urls.savedInsights())
},
},
{
icon: RiseOutlined,
display: 'Go to Trends',
executor: () => {
// TODO: Don't reset insight on change
push(urls.insightNew({ insight: InsightType.TRENDS }))
},
},
{
icon: FunnelPlotOutlined,
display: 'Go to Funnels',
executor: () => {
// TODO: Don't reset insight on change
push(urls.insightNew({ insight: InsightType.FUNNELS }))
},
},
{
icon: GatewayOutlined,
display: 'Go to Retention',
executor: () => {
// TODO: Don't reset insight on change
push(urls.insightNew({ insight: InsightType.RETENTION }))
},
},
{
icon: InteractionOutlined,
display: 'Go to Paths',
executor: () => {
// TODO: Don't reset insight on change
push(urls.insightNew({ insight: InsightType.PATHS }))
},
},
{
icon: ContainerOutlined,
display: 'Go to Events',
executor: () => {
push(urls.events())
},
},
{
icon: AimOutlined,
display: 'Go to Actions',
executor: () => {
push(urls.actions())
},
},
{
icon: UserOutlined,
display: 'Go to Persons',
synonyms: ['people'],
executor: () => {
push(urls.persons())
},
},
{
icon: UsergroupAddOutlined,
display: 'Go to Cohorts',
executor: () => {
push(urls.cohorts())
},
},
{
icon: FlagOutlined,
display: 'Go to Feature Flags',
synonyms: ['feature flags', 'a/b tests'],
executor: () => {
push(urls.featureFlags())
},
},
{
icon: MessageOutlined,
display: 'Go to Annotations',
executor: () => {
push(urls.annotations())
},
},
{
icon: TeamOutlined,
display: 'Go to Team members',
synonyms: ['organization', 'members', 'invites', 'teammates'],
executor: () => {
push(urls.organizationSettings())
},
},
{
icon: ProjectOutlined,
display: 'Go to Project settings',
executor: () => {
push(urls.projectSettings())
},
},
{
icon: SmileOutlined,
display: 'Go to My settings',
synonyms: ['account'],
executor: () => {
push(urls.mySettings())
},
},
{
icon: ApiOutlined,
display: 'Go to Plugins',
synonyms: ['integrations'],
executor: () => {
push(urls.plugins())
},
},
{
icon: DatabaseOutlined,
display: 'Go to System status page',
synonyms: ['redis', 'celery', 'django', 'postgres', 'backend', 'service', 'online'],
executor: () => {
push(urls.systemStatus())
},
},
{
icon: PlusOutlined,
display: 'Create action',
executor: () => {
push(urls.createAction())
},
},
{
icon: LogoutOutlined,
display: 'Log out',
executor: () => {
userLogic.actions.logout()
},
},
],
}
const debugClickhouseQueries: Command = {
key: 'debug-clickhouse-queries',
scope: GLOBAL_COMMAND_SCOPE,
resolver:
userLogic.values.user?.is_staff ||
userLogic.values.user?.is_impersonated ||
preflightLogic.values.preflight?.is_debug ||
preflightLogic.values.preflight?.instance_preferences?.debug_queries
? {
icon: PlusOutlined,
display: 'Debug queries (ClickHouse)',
executor: () => {
debugCHQueries()
},
}
: [],
}
const calculator: Command = {
key: 'calculator',
scope: GLOBAL_COMMAND_SCOPE,
resolver: (argument) => {
// don't try evaluating if there's no argument or if it's a plain number already
if (!argument || !isNaN(+argument)) {
return null
}
try {
const result = +Parser.evaluate(argument)
return isNaN(result)
? null
: {
icon: CalculatorOutlined,
display: `= ${result}`,
guarantee: true,
executor: () => {
copyToClipboard(result.toString(), 'calculation result')
},
}
} catch {
return null
}
},
}
const openUrls: Command = {
key: 'open-urls',
scope: GLOBAL_COMMAND_SCOPE,
prefixes: ['open', 'visit'],
resolver: (argument) => {
const results: CommandResultTemplate[] = (teamLogic.values.currentTeam?.app_urls ?? []).map(
(url: string) => ({
icon: LinkOutlined,
display: `Open ${url}`,
synonyms: [`Visit ${url}`],
executor: () => {
open(url)
},
})
)
if (argument && isURL(argument)) {
results.push({
icon: LinkOutlined,
display: `Open ${argument}`,
synonyms: [`Visit ${argument}`],
executor: () => {
open(argument)
},
})
}
results.push({
icon: LinkOutlined,
display: 'Open PostHog Docs',
synonyms: ['technical documentation'],
executor: () => {
open('https://posthog.com/docs')
},
})
return results
},
}
const createPersonalApiKey: Command = {
key: 'create-personal-api-key',
scope: GLOBAL_COMMAND_SCOPE,
resolver: {
icon: KeyOutlined,
display: 'Create Personal API Key',
executor: () => ({
instruction: 'Give your key a label',
icon: TagOutlined,
scope: 'Creating Personal API Key',
resolver: (argument) => {
if (argument?.length) {
return {
icon: KeyOutlined,
display: `Create Key "${argument}"`,
executor: () => {
personalAPIKeysLogic.actions.createKey(argument)
push(urls.mySettings(), {}, 'personal-api-keys')
},
}
}
return null
},
}),
},
}
const createDashboard: Command = {
key: 'create-dashboard',
scope: GLOBAL_COMMAND_SCOPE,
resolver: {
icon: FundOutlined,
display: 'Create Dashboard',
executor: () => ({
instruction: 'Name your new dashboard',
icon: TagOutlined,
scope: 'Creating Dashboard',
resolver: (argument) => {
if (argument?.length) {
return {
icon: FundOutlined,
display: `Create Dashboard "${argument}"`,
executor: () => {
dashboardsModel.actions.addDashboard({ name: argument, show: true })
},
}
}
return null
},
}),
},
}
const shareFeedback: Command = {
key: 'share-feedback',
scope: GLOBAL_COMMAND_SCOPE,
resolver: {
icon: CommentOutlined,
display: 'Share Feedback',
synonyms: ['send opinion', 'ask question', 'message posthog', 'github issue'],
executor: () => ({
scope: 'Sharing Feedback',
resolver: [
{
display: 'Send Message Directly to PostHog',
icon: CommentOutlined,
executor: () => ({
instruction: "What's on your mind?",
icon: CommentOutlined,
resolver: (argument) => ({
icon: SendOutlined,
display: 'Send',
executor: !argument?.length
? undefined
: () => {
posthog.capture('palette feedback', { message: argument })
return {
resolver: {
icon: CheckOutlined,
display: 'Message Sent!',
executor: true,
},
}
},
}),
}),
},
{
icon: VideoCameraOutlined,
display: 'Schedule Quick Call',
executor: () => {
open('https://calendly.com/posthog-feedback')
},
},
{
icon: ExclamationCircleOutlined,
display: 'Create GitHub Issue',
executor: () => {
open('https://github.com/PostHog/posthog/issues/new/choose')
},
},
],
}),
},
}
actions.registerCommand(goTo)
actions.registerCommand(openUrls)
actions.registerCommand(debugClickhouseQueries)
actions.registerCommand(calculator)
actions.registerCommand(createPersonalApiKey)
actions.registerCommand(createDashboard)
actions.registerCommand(shareFeedback)
},
beforeUnmount: () => {
actions.deregisterCommand('go-to')
actions.deregisterCommand('open-urls')
actions.deregisterCommand('debug-clickhouse-queries')
actions.deregisterCommand('calculator')
actions.deregisterCommand('create-personal-api-key')
actions.deregisterCommand('create-dashboard')
actions.deregisterCommand('share-feedback')
},
}),
})
Example #6
Source File: Icon.tsx From html2sketch with MIT License | 4 votes |
IconSymbol: FC = () => {
return (
<Row>
{/*<CaretUpOutlined*/}
{/* className="icon"*/}
{/* symbolName={'1.General/2.Icons/1.CaretUpOutlined'}*/}
{/*/>*/}
{/* className="icon"*/}
{/* symbolName={'1.General/2.Icons/2.MailOutlined'}*/}
{/*/>*/}
{/*<StepBackwardOutlined*/}
{/* className="icon"*/}
{/* symbolName={'1.General/2.Icons/2.StepBackwardOutlined'}*/}
{/*/>*/}
{/*<StepForwardOutlined*/}
{/* className="icon"*/}
{/* symbolName={'1.General/2.Icons/2.StepBackwardOutlined'}*/}
{/*/>*/}
<StepForwardOutlined />
<ShrinkOutlined />
<ArrowsAltOutlined />
<DownOutlined />
<UpOutlined />
<LeftOutlined />
<RightOutlined />
<CaretUpOutlined />
<CaretDownOutlined />
<CaretLeftOutlined />
<CaretRightOutlined />
<VerticalAlignTopOutlined />
<RollbackOutlined />
<FastBackwardOutlined />
<FastForwardOutlined />
<DoubleRightOutlined />
<DoubleLeftOutlined />
<VerticalLeftOutlined />
<VerticalRightOutlined />
<VerticalAlignMiddleOutlined />
<VerticalAlignBottomOutlined />
<ForwardOutlined />
<BackwardOutlined />
<EnterOutlined />
<RetweetOutlined />
<SwapOutlined />
<SwapLeftOutlined />
<SwapRightOutlined />
<ArrowUpOutlined />
<ArrowDownOutlined />
<ArrowLeftOutlined />
<ArrowRightOutlined />
<LoginOutlined />
<LogoutOutlined />
<MenuFoldOutlined />
<MenuUnfoldOutlined />
<BorderBottomOutlined />
<BorderHorizontalOutlined />
<BorderInnerOutlined />
<BorderOuterOutlined />
<BorderLeftOutlined />
<BorderRightOutlined />
<BorderTopOutlined />
<BorderVerticleOutlined />
<PicCenterOutlined />
<PicLeftOutlined />
<PicRightOutlined />
<RadiusBottomleftOutlined />
<RadiusBottomrightOutlined />
<RadiusUpleftOutlined />
<RadiusUprightOutlined />
<FullscreenOutlined />
<FullscreenExitOutlined />
<QuestionOutlined />
<PauseOutlined />
<MinusOutlined />
<PauseCircleOutlined />
<InfoOutlined />
<CloseOutlined />
<ExclamationOutlined />
<CheckOutlined />
<WarningOutlined />
<IssuesCloseOutlined />
<StopOutlined />
<EditOutlined />
<CopyOutlined />
<ScissorOutlined />
<DeleteOutlined />
<SnippetsOutlined />
<DiffOutlined />
<HighlightOutlined />
<AlignCenterOutlined />
<AlignLeftOutlined />
<AlignRightOutlined />
<BgColorsOutlined />
<BoldOutlined />
<ItalicOutlined />
<UnderlineOutlined />
<StrikethroughOutlined />
<RedoOutlined />
<UndoOutlined />
<ZoomInOutlined />
<ZoomOutOutlined />
<FontColorsOutlined />
<FontSizeOutlined />
<LineHeightOutlined />
<SortAscendingOutlined />
<SortDescendingOutlined />
<DragOutlined />
<OrderedListOutlined />
<UnorderedListOutlined />
<RadiusSettingOutlined />
<ColumnWidthOutlined />
<ColumnHeightOutlined />
<AreaChartOutlined />
<PieChartOutlined />
<BarChartOutlined />
<DotChartOutlined />
<LineChartOutlined />
<RadarChartOutlined />
<HeatMapOutlined />
<FallOutlined />
<RiseOutlined />
<StockOutlined />
<BoxPlotOutlined />
<FundOutlined />
<SlidersOutlined />
<AndroidOutlined />
<AppleOutlined />
<WindowsOutlined />
<IeOutlined />
<ChromeOutlined />
<GithubOutlined />
<AliwangwangOutlined />
<DingdingOutlined />
<WeiboSquareOutlined />
<WeiboCircleOutlined />
<TaobaoCircleOutlined />
<Html5Outlined />
<WeiboOutlined />
<TwitterOutlined />
<WechatOutlined />
<AlipayCircleOutlined />
<TaobaoOutlined />
<SkypeOutlined />
<FacebookOutlined />
<CodepenOutlined />
<CodeSandboxOutlined />
<AmazonOutlined />
<GoogleOutlined />
<AlipayOutlined />
<AntDesignOutlined />
<AntCloudOutlined />
<ZhihuOutlined />
<SlackOutlined />
<SlackSquareOutlined />
<BehanceSquareOutlined />
<DribbbleOutlined />
<DribbbleSquareOutlined />
<InstagramOutlined />
<YuqueOutlined />
<AlibabaOutlined />
<YahooOutlined />
<RedditOutlined />
<SketchOutlined />
<AccountBookOutlined />
<AlertOutlined />
<ApartmentOutlined />
<ApiOutlined />
<QqOutlined />
<MediumWorkmarkOutlined />
<GitlabOutlined />
<MediumOutlined />
<GooglePlusOutlined />
<AppstoreAddOutlined />
<AppstoreOutlined />
<AudioOutlined />
<AudioMutedOutlined />
<AuditOutlined />
<BankOutlined />
<BarcodeOutlined />
<BarsOutlined />
<BellOutlined />
<BlockOutlined />
<BookOutlined />
<BorderOutlined />
<BranchesOutlined />
<BuildOutlined />
<BulbOutlined />
<CalculatorOutlined />
<CalendarOutlined />
<CameraOutlined />
<CarOutlined />
<CarryOutOutlined />
<CiCircleOutlined />
<CiOutlined />
<CloudOutlined />
<ClearOutlined />
<ClusterOutlined />
<CodeOutlined />
<CoffeeOutlined />
<CompassOutlined />
<CompressOutlined />
<ContactsOutlined />
<ContainerOutlined />
<ControlOutlined />
<CopyrightCircleOutlined />
<CopyrightOutlined />
<CreditCardOutlined />
<CrownOutlined />
<CustomerServiceOutlined />
<DashboardOutlined />
<DatabaseOutlined />
<DeleteColumnOutlined />
<DeleteRowOutlined />
<DisconnectOutlined />
<DislikeOutlined />
<DollarCircleOutlined />
<DollarOutlined />
<DownloadOutlined />
<EllipsisOutlined />
<EnvironmentOutlined />
<EuroCircleOutlined />
<EuroOutlined />
<ExceptionOutlined />
<ExpandAltOutlined />
<ExpandOutlined />
<ExperimentOutlined />
<ExportOutlined />
<EyeOutlined />
<FieldBinaryOutlined />
<FieldNumberOutlined />
<FieldStringOutlined />
<DesktopOutlined />
<DingtalkOutlined />
<FileAddOutlined />
<FileDoneOutlined />
<FileExcelOutlined />
<FileExclamationOutlined />
<FileOutlined />
<FileImageOutlined />
<FileJpgOutlined />
<FileMarkdownOutlined />
<FilePdfOutlined />
<FilePptOutlined />
<FileProtectOutlined />
<FileSearchOutlined />
<FileSyncOutlined />
<FileTextOutlined />
<FileUnknownOutlined />
<FileWordOutlined />
<FilterOutlined />
<FireOutlined />
<FlagOutlined />
<FolderAddOutlined />
<FolderOutlined />
<FolderOpenOutlined />
<ForkOutlined />
<FormatPainterOutlined />
<FrownOutlined />
<FunctionOutlined />
<FunnelPlotOutlined />
<GatewayOutlined />
<GifOutlined />
<GiftOutlined />
<GlobalOutlined />
<GoldOutlined />
<GroupOutlined />
<HddOutlined />
<HeartOutlined />
<HistoryOutlined />
<HomeOutlined />
<HourglassOutlined />
<IdcardOutlined />
<ImportOutlined />
<InboxOutlined />
<InsertRowAboveOutlined />
<InsertRowBelowOutlined />
<InsertRowLeftOutlined />
<InsertRowRightOutlined />
<InsuranceOutlined />
<InteractionOutlined />
<KeyOutlined />
<LaptopOutlined />
<LayoutOutlined />
<LikeOutlined />
<LineOutlined />
<LinkOutlined />
<Loading3QuartersOutlined />
<LoadingOutlined />
<LockOutlined />
<MailOutlined />
<ManOutlined />
<MedicineBoxOutlined />
<MehOutlined />
<MenuOutlined />
<MergeCellsOutlined />
<MessageOutlined />
<MobileOutlined />
<MoneyCollectOutlined />
<MonitorOutlined />
<MoreOutlined />
<NodeCollapseOutlined />
<NodeExpandOutlined />
<NodeIndexOutlined />
<NotificationOutlined />
<NumberOutlined />
<PaperClipOutlined />
<PartitionOutlined />
<PayCircleOutlined />
<PercentageOutlined />
<PhoneOutlined />
<PictureOutlined />
<PoundCircleOutlined />
<PoundOutlined />
<PoweroffOutlined />
<PrinterOutlined />
<ProfileOutlined />
<ProjectOutlined />
<PropertySafetyOutlined />
<PullRequestOutlined />
<PushpinOutlined />
<QrcodeOutlined />
<ReadOutlined />
<ReconciliationOutlined />
<RedEnvelopeOutlined />
<ReloadOutlined />
<RestOutlined />
<RobotOutlined />
<RocketOutlined />
<SafetyCertificateOutlined />
<SafetyOutlined />
<ScanOutlined />
<ScheduleOutlined />
<SearchOutlined />
<SecurityScanOutlined />
<SelectOutlined />
<SendOutlined />
<SettingOutlined />
<ShakeOutlined />
<ShareAltOutlined />
<ShopOutlined />
<ShoppingCartOutlined />
<ShoppingOutlined />
<SisternodeOutlined />
<SkinOutlined />
<SmileOutlined />
<SolutionOutlined />
<SoundOutlined />
<SplitCellsOutlined />
<StarOutlined />
<SubnodeOutlined />
<SyncOutlined />
<TableOutlined />
<TabletOutlined />
<TagOutlined />
<TagsOutlined />
<TeamOutlined />
<ThunderboltOutlined />
<ToTopOutlined />
<ToolOutlined />
<TrademarkCircleOutlined />
<TrademarkOutlined />
<TransactionOutlined />
<TrophyOutlined />
<UngroupOutlined />
<UnlockOutlined />
<UploadOutlined />
<UsbOutlined />
<UserAddOutlined />
<UserDeleteOutlined />
<UserOutlined />
<UserSwitchOutlined />
<UsergroupAddOutlined />
<UsergroupDeleteOutlined />
<VideoCameraOutlined />
<WalletOutlined />
<WifiOutlined />
<BorderlessTableOutlined />
<WomanOutlined />
<BehanceOutlined />
<DropboxOutlined />
<DeploymentUnitOutlined />
<UpCircleOutlined />
<DownCircleOutlined />
<LeftCircleOutlined />
<RightCircleOutlined />
<UpSquareOutlined />
<DownSquareOutlined />
<LeftSquareOutlined />
<RightSquareOutlined />
<PlayCircleOutlined />
<QuestionCircleOutlined />
<PlusCircleOutlined />
<PlusSquareOutlined />
<MinusSquareOutlined />
<MinusCircleOutlined />
<InfoCircleOutlined />
<ExclamationCircleOutlined />
<CloseCircleOutlined />
<CloseSquareOutlined />
<CheckCircleOutlined />
<CheckSquareOutlined />
<ClockCircleOutlined />
<FormOutlined />
<DashOutlined />
<SmallDashOutlined />
<YoutubeOutlined />
<CodepenCircleOutlined />
<AliyunOutlined />
<PlusOutlined />
<LinkedinOutlined />
<AimOutlined />
<BugOutlined />
<CloudDownloadOutlined />
<CloudServerOutlined />
<CloudSyncOutlined />
<CloudUploadOutlined />
<CommentOutlined />
<ConsoleSqlOutlined />
<EyeInvisibleOutlined />
<FileGifOutlined />
<DeliveredProcedureOutlined />
<FieldTimeOutlined />
<FileZipOutlined />
<FolderViewOutlined />
<FundProjectionScreenOutlined />
<FundViewOutlined />
<MacCommandOutlined />
<PlaySquareOutlined />
<OneToOneOutlined />
<RotateLeftOutlined />
<RotateRightOutlined />
<SaveOutlined />
<SwitcherOutlined />
<TranslationOutlined />
<VerifiedOutlined />
<VideoCameraAddOutlined />
<WhatsAppOutlined />
{/*</Col>*/}
</Row>
);
}
Example #7
Source File: BuilderToolbox.tsx From next-basics with GNU General Public License v3.0 | 4 votes |
export function BuilderToolbox({
showDataView = false,
onContextUpdate,
}: BuilderToolboxProps): React.ReactElement {
const {
dataType,
toolboxTab: activeTab,
setToolboxTab: setActiveTab,
} = useBuilderUIContext();
const storage = React.useMemo(() => new JsonStorage(localStorage), []);
const [toolboxWidth, setToolboxWidth] = React.useState(
storage.getItem(toolboxWidthKey) ?? defaultToolboxWidth
);
const [resizerStatus, setResizerStatus] =
React.useState<ToolboxResizerStatus>(null);
const [resized, setResized] = React.useState(false);
const manager = useBuilderDataManager();
const showRelatedEvents = useShowRelatedNodesBasedOnEvents();
useEffect(() => {
const showFromStorage = storage.getItem(
localStorageKeyForShowRelatedNodesBasedOnEvents
);
const shouldShow = activeTab === ToolboxTab.EVENTS_VIEW || showFromStorage;
if (shouldShow !== showRelatedEvents) {
manager.setShowRelatedNodesBasedOnEvents(shouldShow);
}
}, [activeTab]);
const tabList: ToolboxTabConf[] = [
{
tab: ToolboxTab.TREE_VIEW,
icon() {
return <PartitionOutlined />;
},
content() {
return <StoryboardTreeView />;
},
},
{
tab: ToolboxTab.EVENTS_VIEW,
icon() {
return (
<FontAwesomeIcon icon="broadcast-tower" style={{ fontSize: 12 }} />
);
},
content() {
return <EventsView />;
},
availableDataTypes: [
BuilderDataType.ROUTE_OF_BRICKS,
BuilderDataType.CUSTOM_TEMPLATE,
],
},
{
tab: ToolboxTab.DATA_VIEW,
icon() {
return <DatabaseOutlined />;
},
content() {
return <DataView onContextUpdate={onContextUpdate} />;
},
availableDataTypes: [
BuilderDataType.ROUTE_OF_BRICKS,
BuilderDataType.ROUTE_OF_ROUTES,
].concat(showDataView ? [dataType] : []),
},
];
const handleColResizeMouseDown = React.useCallback(
(event: React.MouseEvent) => {
// Prevent text selecting.
event.preventDefault();
setResizerStatus({
startWidth: toolboxWidth,
startX: event.clientX,
});
setResized(false);
},
[toolboxWidth]
);
React.useEffect(() => {
if (!resizerStatus) {
return;
}
const handleColResizeMouseMove = (event: MouseEvent): void => {
setResized(true);
setToolboxWidth(
Math.max(
minToolboxWidth,
Math.min(
document.documentElement.clientWidth - 300,
resizerStatus.startWidth + event.clientX - resizerStatus.startX
)
)
);
};
const handleColResizeMouseUp = (): void => {
setResizerStatus(null);
};
window.addEventListener("mousemove", handleColResizeMouseMove);
window.addEventListener("mouseup", handleColResizeMouseUp);
return () => {
window.removeEventListener("mousemove", handleColResizeMouseMove);
window.removeEventListener("mouseup", handleColResizeMouseUp);
};
}, [resizerStatus]);
React.useEffect(() => {
if (!resizerStatus && resized) {
storage.setItem(toolboxWidthKey, toolboxWidth);
}
}, [resized, resizerStatus, storage, toolboxWidth]);
return (
<div
className={styles.builderToolbox}
data-override-theme="dark"
style={{
width: toolboxWidth,
}}
>
<ul className={styles.tabList}>
{tabList.map(
(tabConf) =>
(!tabConf.availableDataTypes ||
tabConf.availableDataTypes.includes(dataType)) && (
<li
key={tabConf.tab}
className={classNames({
[styles.tabActive]: activeTab === tabConf.tab,
})}
>
<a
className={styles.tabLink}
role="button"
onClick={() => setActiveTab(tabConf.tab)}
>
{tabConf.icon()}
</a>
</li>
)
)}
</ul>
<div className={styles.tabContent}>
{tabList.find((tabConf) => tabConf.tab === activeTab)?.content()}
</div>
<div
className={classNames(styles.toolboxResizer, {
[styles.toolboxResizerActive]: !!resizerStatus,
})}
onMouseDown={handleColResizeMouseDown}
>
{/* Use a fullscreen mask to keep cursor status when dragging the resizer. */}
<div className={styles.toolboxResizerMask} />
</div>
</div>
);
}
Example #8
Source File: index.tsx From fe-v5 with Apache License 2.0 | 4 votes |
SideMenu: FC = () => {
const { t, i18n } = useTranslation();
const menuList = [
{
key: 'targets',
icon: <DatabaseOutlined />,
title: t('监控对象'),
children: [
{
key: '/targets',
title: t('对象列表'),
},
],
},
{
key: 'monitor',
icon: <LineChartOutlined />,
title: t('监控看图'),
children: [
{
key: '/metric/explorer',
title: t('即时查询'),
},
{
key: '/object/explorer',
title: t('快捷视图'),
},
{
key: '/dashboards',
title: t('监控大盘'),
},
],
},
{
key: 'alarm',
icon: <AlertOutlined />,
title: t('告警管理'),
children: [
{
key: '/alert-rules',
title: t('告警规则'),
},
{
key: '/alert-mutes',
title: t('屏蔽规则'),
},
{
key: '/alert-subscribes',
title: t('订阅规则'),
},
{
key: '/alert-cur-events',
title: t('活跃告警'),
},
{
key: '/alert-his-events',
title: t('历史告警'),
},
],
},
{
key: 'job',
icon: <CodeOutlined />,
title: t('告警自愈'),
children: [
{
key: '/job-tpls',
title: t('自愈脚本'),
},
{
key: '/job-tasks',
title: t('执行历史'),
},
],
},
{
key: 'manage',
icon: <UserOutlined />,
title: t('人员组织'),
children: [
{
key: '/users',
title: t('用户管理'),
},
{
key: '/user-groups',
title: t('团队管理'),
},
{
key: '/busi-groups',
title: t('业务组管理'),
},
],
},
{
key: 'help',
icon: <Icon component={SystemInfoSvg as any} />,
title: t('系统信息'),
children: [
{
key: '/help/version',
title: t('系统版本'),
},
{
key: '/help/contact',
title: t('联系我们'),
},
{
key: '/help/migrate',
title: t('管理员迁移'),
},
],
},
];
const [menus, setMenus] = useState(menuList);
const history = useHistory();
const location = useLocation();
const { pathname } = location;
let { profile } = useSelector<AccountRootState, accountStoreState>((state) => state.account);
const [collapsed, setCollapsed] = useState(localStorage.getItem('menuCollapsed') === '1');
const [selectedKeys, setSelectedKeys] = useState<string[]>([defaultSelectedKey(menus, pathname)]);
const [openKeys, setOpenKeys] = useState<string[]>(collapsed ? [] : [getDefaultOpenKey(menus, pathname)]);
const toggleCollapsed = () => {
setCollapsed(!collapsed);
localStorage.setItem('menuCollapsed', !collapsed ? '1' : '0');
};
const handleClick: MenuClickEventHandler = ({ key }) => {
setSelectedKeys([key as string]);
// 写两个key as string 感觉有点傻
if (key === 'changeLanguage') {
let language = i18n.language == 'en' ? 'zh' : 'en';
i18n.changeLanguage(language);
localStorage.setItem('language', language);
}
if ((key as string).startsWith('/')) {
history.push(key as string);
}
};
const hideSideMenu = () => location.pathname === '/login' || location.pathname.startsWith('/chart/') || location.pathname === '/callback';
useEffect(() => {
setSelectedKeys([defaultSelectedKey(menus, pathname)]);
if (!collapsed) {
setOpenKeys(_.union([...openKeys, getDefaultOpenKey(menus, pathname)]));
}
}, [pathname, collapsed]);
useEffect(() => {
if (profile.roles.length > 0) {
if (profile.roles.indexOf('Admin') === -1) {
getMenuPerm().then((res) => {
const { dat } = res;
const newMenus = [...menuList];
newMenus.forEach((menu) => {
menu.children = menu.children.filter((item) => dat.includes(item.key));
});
setMenus(newMenus);
});
} else {
setMenus(menuList);
}
}
}, [profile.roles]);
return hideSideMenu() ? null : (
<div
style={{
display: 'flex',
flexDirection: 'column',
}}
>
<div className={`home ${collapsed ? 'collapse' : ''}`}>
<div className='name' onClick={() => history.push('/metric/explorer')} key='overview'>
<img src={collapsed ? '/image/logo.svg' : '/image/logo-l.svg'} alt='' className='logo' />
</div>
</div>
<Menu
className='left-menu-container'
theme='dark'
inlineCollapsed={collapsed}
openKeys={openKeys}
selectedKeys={selectedKeys}
onClick={handleClick}
mode='inline'
onOpenChange={(openKeys: string[]) => {
setOpenKeys(openKeys);
}}
>
{_.map(menus, (subMenus) => {
return (
subMenus.children.length > 0 && (
<SubMenu key={subMenus.key} icon={subMenus.icon} title={subMenus.title}>
{_.map(subMenus.children, (menu) => {
return <Menu.Item key={menu.key}>{menu.title}</Menu.Item>;
})}
</SubMenu>
)
);
})}
{lazyMenu.sort((a, b) => b.weight - a.weight).map((item) => item.content)}
</Menu>
<Button type='text' onClick={toggleCollapsed} className='collapseBtn'>
{React.createElement(collapsed ? MenuUnfoldOutlined : MenuFoldOutlined)}
</Button>
</div>
);
}
Example #9
Source File: index.tsx From fe-v5 with Apache License 2.0 | 4 votes |
export default function index() {
const { t } = useTranslation();
const dispatch = useDispatch();
const [curBusiId, setCurBusiId] = useState<number>(-1);
const [curClusterItems, setCurClusterItems] = useState<string[]>([]);
const [range, setRange] = useState<Range>({
num: 1,
unit: 'hours',
description: '',
});
const { queryContent } = useSelector<RootState, eventStoreState>((state) => state.event);
const [query, setQuery] = useState<string>();
const [targets, setTargets] = useState<string[]>([]);
const [calc, setCalc] = useState<string>('avg');
const [series, setSeries] = useState<any[]>([]);
const [form] = Form.useForm();
const [visible, setVisible] = useState<boolean>(false);
const [options, setOptions] = useState<any>({});
function saveData(prop, data) {
dispatch({
type: 'event/saveData',
prop,
data,
});
}
useEffect(() => {
getMonObjectList({
bgid: curBusiId,
clusters: _.join(curClusterItems, ','),
query,
}).then((res) => {
setTargets(res.dat.list);
});
}, [curBusiId, curClusterItems, query]);
return (
<PageLayout icon={<DatabaseOutlined />} title={t('对象蜂窝图')} hideCluster>
<div>
<div className='targets-map-container'>
<div className='targets-map-header'>
<Space>
<Refresh onRefresh={() => {}} />
<DateRangePicker onChange={setRange} />
<ColumnSelect noLeftPadding onBusiGroupChange={(e) => setCurBusiId(typeof e === 'number' ? e : -1)} onClusterChange={(e) => setCurClusterItems(e)} />
<Input
className='search-input'
prefix={<SearchOutlined />}
placeholder='模糊搜索规则和标签(多个关键词请用空格分隔)'
value={queryContent}
onChange={(e) => saveData('queryContent', e.target.value)}
onPressEnter={() => {
setQuery(queryContent);
}}
/>
</Space>
<Space>
<MetricSelect
range={range}
idents={_.map(targets, 'ident')}
calc={calc}
onChange={(val) => {
setSeries(val);
}}
/>
<Select
value={calc}
onChange={(e) => {
setCalc(e);
}}
>
<Select.Option value='avg'>avg</Select.Option>
<Select.Option value='max'>max</Select.Option>
<Select.Option value='min'>min</Select.Option>
<Select.Option value='sum'>sum</Select.Option>
</Select>
<Button
icon={<SettingOutlined />}
onClick={() => {
setVisible(true);
}}
/>
</Space>
</div>
<div style={{ padding: 20 }}>
<Hexbin
series={series}
values={
{
custom: {
calc,
},
options: options.options,
} as any
}
/>
</div>
</div>
</div>
<Modal
title='自定义设置'
width={600}
visible={visible}
onCancel={() => {
setVisible(false);
}}
onOk={() => {
form.validateFields().then((values) => {
setOptions(values);
setVisible(false);
});
}}
>
<Form layout='vertical' form={form} initialValues={{}}>
<div className='n9e-collapse'>
<ValueMappings />
<StandardOptions />
</div>
</Form>
</Modal>
</PageLayout>
);
}
Example #10
Source File: index.tsx From fe-v5 with Apache License 2.0 | 4 votes |
MonObjectManage: React.FC = () => {
const { t } = useTranslation();
const tableRef = useRef({
handleReload() {},
});
const isAddTagToQueryInput = useRef(false);
const [tableQueryContent, setTableQueryContent] = useState<string>('');
const [operateType, setOperateType] = useState<OperateType>(OperateType.None);
const [curClusters, setCurClusters] = useState<string[]>([]);
const [curBusiId, setCurBusiId] = useState<number>(-2);
const [selectedRowKeys, setSelectedRowKeys] = useState<(string | number)[]>([]);
const [selectedIdents, setSelectedIdents] = useState<string[]>([]);
const columns = [
{
title: '集群',
dataIndex: 'cluster',
width: 100,
fixed: 'left' as const,
},
{
title: '标识',
dataIndex: 'ident',
width: 140,
},
{
title: '标签',
dataIndex: 'tags',
ellipsis: {
showTitle: false,
},
render(tagArr) {
const content =
tagArr &&
tagArr.map((item) => (
<Tag
color='blue'
key={item}
onClick={(e) => {
if (!tableQueryContent.includes(item)) {
isAddTagToQueryInput.current = true;
setTableQueryContent(tableQueryContent ? `${tableQueryContent.trim()} ${item}` : item);
}
}}
>
{item}
</Tag>
));
return (
tagArr && (
<Tooltip title={content} placement='topLeft' getPopupContainer={() => document.body} overlayClassName='mon-manage-table-tooltip'>
{content}
</Tooltip>
)
);
},
},
{
title: '业务组',
dataIndex: 'group_obj',
width: 140,
render(groupObj: BusiGroupItem | null) {
return groupObj ? groupObj.name : '未归组';
},
},
{
title: '备注',
dataIndex: 'note',
ellipsis: {
showTitle: false,
},
render(note) {
return (
<Tooltip title={note} placement='topLeft' getPopupContainer={() => document.body}>
{note}
</Tooltip>
);
},
},
];
function renderLeftHeader() {
return (
<div className='table-operate-box'>
<Space>
<ColumnSelect noLeftPadding onClusterChange={(e) => setCurClusters(e)} />
<Input
className='search-input'
prefix={<SearchOutlined />}
placeholder='模糊搜索表格内容(多个关键词请用空格分隔)'
value={tableQueryContent}
onChange={(e) => setTableQueryContent(e.target.value)}
onPressEnter={(e) => tableRef.current.handleReload()}
/>
</Space>
<Dropdown
trigger={['click']}
overlay={
<Menu
onClick={({ key }) => {
showOperationModal(key as OperateType);
}}
>
<Menu.Item key={OperateType.BindTag}>绑定标签</Menu.Item>
<Menu.Item key={OperateType.UnbindTag}>解绑标签</Menu.Item>
<Menu.Item key={OperateType.UpdateBusi}>修改业务组</Menu.Item>
<Menu.Item key={OperateType.RemoveBusi}>移出业务组</Menu.Item>
<Menu.Item key={OperateType.UpdateNote}>修改备注</Menu.Item>
<Menu.Item key={OperateType.Delete}>批量删除</Menu.Item>
</Menu>
}
>
<Button>
批量操作 <DownOutlined />
</Button>
</Dropdown>
</div>
);
}
function showOperationModal(curOperateType: OperateType) {
setOperateType(curOperateType);
}
useEffect(() => {
tableRef.current.handleReload();
}, [curBusiId, curClusters]);
useEffect(() => {
if (isAddTagToQueryInput.current) {
tableRef.current.handleReload();
isAddTagToQueryInput.current = false;
}
}, [tableQueryContent]);
return (
<PageLayout icon={<DatabaseOutlined />} title={t('对象列表')} hideCluster>
<div className='object-manage-page-content'>
<LeftTree
busiGroup={{
showNotGroupItem: true,
onChange(value) {
setCurBusiId(typeof value === 'number' ? value : -1);
setSelectedRowKeys([]);
setSelectedIdents([]);
},
}}
/>
<div className='table-area'>
{curBusiId !== -2 && (
<DataTable
ref={tableRef}
antProps={{
rowKey: 'id',
rowSelection: {
selectedRowKeys: selectedRowKeys,
onChange(selectedRowKeys, selectedRows: targetProps[]) {
setSelectedRowKeys(selectedRowKeys);
setSelectedIdents(selectedRows ? selectedRows.map(({ ident }) => ident) : []);
},
},
// scroll: { x: 800, y: 'calc(100vh - 252px)' },
}}
url='/api/n9e/targets'
customQueryCallback={(data) =>
Object.assign(
data,
tableQueryContent ? { query: tableQueryContent } : {},
curBusiId !== -1 ? { bgid: curBusiId } : {},
curClusters.length ? { clusters: curClusters.join(',') } : {},
)
}
pageParams={{
curPageName: 'p',
pageSizeName: 'limit',
pageSize: 30,
pageSizeOptions: ['30', '100', '200', '500'],
}}
apiCallback={({ dat: { list: data, total } }) => ({
data,
total,
})}
columns={columns}
reloadBtnType='btn'
reloadBtnPos='left'
filterType='flex'
leftHeader={renderLeftHeader()}
/>
)}
</div>
</div>
<OperationModal operateType={operateType} setOperateType={setOperateType} idents={selectedIdents} reloadList={tableRef.current.handleReload} />
</PageLayout>
);
}
Example #11
Source File: index.tsx From nanolooker with MIT License | 4 votes |
AppHeader: React.FC = () => {
const { t } = useTranslation();
const [activeMenu, setActiveMenu] = React.useState<string>("");
const history = useHistory();
const { pathname } = useLocation();
React.useEffect(() => {
const key = pathname.replace(/\/?([^/]+)/, "$1");
setActiveMenu(key);
}, [pathname]);
return (
<>
<Header
className="app-header"
style={{
paddingTop: "6px",
position: "relative",
width: "100%",
height: "auto",
}}
>
<Row style={{ alignItems: "center" }}>
<Col
xs={6}
md={4}
order={1}
style={{
display: "flex",
alignItems: "center",
minHeight: "50px",
}}
>
<Link to="/" style={{ whiteSpace: "nowrap", marginRight: "10px" }}>
NanoLooker
</Link>
</Col>
<Col xs={{ span: 24, order: 3 }} md={{ span: 12, order: 2 }}>
<Menu
onClick={() => {}}
selectedKeys={[activeMenu]}
mode="horizontal"
>
<SubMenu
key="explore-submenu"
title={
<span onClick={() => history.push("/")}>
<ApartmentOutlined />
{t("menu.explore")}
</span>
}
>
<Menu.Item key="representatives">
{t("menu.representatives")}
<Link to="/representatives" />
</Menu.Item>
<Menu.Item key="developer-fund">
{t("menu.developerFund")}
<Link to="/developer-fund" />
</Menu.Item>
<Menu.Item key="known-accounts">
{t("menu.knownAccounts")}
<Link to="/known-accounts" />
</Menu.Item>
<Menu.Item key="large-transactions">
{t("menu.largeTransactions")}
<Link to="/large-transactions" />
</Menu.Item>
<Menu.Item key="distribution">
{t("menu.distribution")}
<Link to="/distribution" />
</Menu.Item>
<Menu.Item key="exchange-tracker">
{t("menu.exchangeTracker")}
<Link to="/exchange-tracker" />
</Menu.Item>
<Menu.Item key="faucets">
{t("menu.faucets")}
<Link to="/faucets" />
</Menu.Item>
</SubMenu>
<Menu.Item key="news">
<CalendarOutlined />
{t("menu.news")}
<Link to="/news" />
</Menu.Item>
<SubMenu
key="status-submenu"
title={
<>
<DatabaseOutlined />
{t("menu.status")}
</>
}
>
<Menu.Item key="node-status">
{t("menu.nodeStatus")}
<Link to="/node-status" />
</Menu.Item>
<Menu.Item key="network-status">
{t("menu.networkStatus")}
<Link to="/network-status" />
</Menu.Item>
</SubMenu>
</Menu>
</Col>
<Col
xs={{ span: 18, order: 2 }}
md={{ span: 8, order: 3 }}
style={{ textAlign: "right" }}
>
<Search />
</Col>
</Row>
</Header>
<div
className="app-sub-header"
style={{
display: "flex",
justifyContent: "space-between",
}}
>
<div
className="price-list"
style={{
display: "flex",
flexWrap: "wrap",
alignItems: "center",
width: "100%",
marginRight: "12px",
}}
>
<Price />
</div>
<div>
<Preferences />
</div>
</div>
</>
);
}
Example #12
Source File: ChartConfigPanel.tsx From datart with Apache License 2.0 | 4 votes |
ChartConfigPanel: FC<{
dataView?: ChartDataView;
chartId?: string;
chartConfig?: ChartConfig;
expensiveQuery?: boolean;
onChange: (type: string, payload: ChartConfigPayloadType) => void;
}> = memo(
({ chartId, chartConfig, expensiveQuery, onChange }) => {
const t = useI18NPrefix(`viz.palette`);
const [tabActiveKey, setTabActiveKey] = useComputedState(
() => {
return cond(
[config => !isEmptyArray(config?.datas), CONFIG_PANEL_TABS.DATA],
[config => !isEmptyArray(config?.styles), CONFIG_PANEL_TABS.STYLE],
[
config => !isEmptyArray(config?.settings),
CONFIG_PANEL_TABS.SETTING,
],
)(chartConfig, CONFIG_PANEL_TABS.DATA);
},
(prev, next) => prev !== next,
chartId,
);
const onDataConfigChanged = (
ancestors,
config: ChartDataConfig,
needRefresh?: boolean,
) => {
onChange?.(ChartConfigReducerActionType.DATA, {
ancestors: ancestors,
value: config,
needRefresh,
});
};
const onStyleConfigChanged = (
ancestors: number[],
config: ChartStyleConfig,
needRefresh?: boolean,
) => {
onChange?.(ChartConfigReducerActionType.STYLE, {
ancestors: ancestors,
value: config,
needRefresh,
});
};
const onSettingConfigChanged = (
ancestors: number[],
config: ChartStyleConfig,
needRefresh?: boolean,
) => {
onChange?.(ChartConfigReducerActionType.SETTING, {
ancestors: ancestors,
value: config,
needRefresh,
});
};
return (
<ChartI18NContext.Provider value={{ i18NConfigs: chartConfig?.i18ns }}>
<ChartPaletteContext.Provider value={{ datas: chartConfig?.datas }}>
<StyledChartDataViewPanel>
<ChartToolbar />
<ConfigBlock>
<Tabs
activeKey={tabActiveKey}
className="tabs"
onChange={setTabActiveKey}
>
{!isEmptyArray(chartConfig?.datas) && (
<TabPane
tab={
<span>
<DatabaseOutlined />
{t('title.content')}
</span>
}
key={CONFIG_PANEL_TABS.DATA}
/>
)}
{!isEmptyArray(chartConfig?.styles) && (
<TabPane
tab={
<span>
<DashboardOutlined />
{t('title.design')}
</span>
}
key={CONFIG_PANEL_TABS.STYLE}
/>
)}
{!isEmptyArray(chartConfig?.settings) && (
<TabPane
tab={
<span>
<SettingOutlined />
{t('title.setting')}
</span>
}
key={CONFIG_PANEL_TABS.SETTING}
/>
)}
</Tabs>
<Pane selected={tabActiveKey === CONFIG_PANEL_TABS.DATA}>
<ChartDataConfigPanel
dataConfigs={chartConfig?.datas}
expensiveQuery={expensiveQuery}
onChange={onDataConfigChanged}
/>
</Pane>
<Pane selected={tabActiveKey === CONFIG_PANEL_TABS.STYLE}>
<ChartStyleConfigPanel
configs={chartConfig?.styles}
dataConfigs={chartConfig?.datas}
onChange={onStyleConfigChanged}
/>
</Pane>
<Pane selected={tabActiveKey === CONFIG_PANEL_TABS.SETTING}>
<ChartSettingConfigPanel
configs={chartConfig?.settings}
dataConfigs={chartConfig?.datas}
onChange={onSettingConfigChanged}
/>
</Pane>
</ConfigBlock>
</StyledChartDataViewPanel>
</ChartPaletteContext.Provider>
</ChartI18NContext.Provider>
);
},
(prev, next) =>
prev.chartConfig === next.chartConfig &&
prev.chartId === next.chartId &&
prev.expensiveQuery === next.expensiveQuery,
)
Example #13
Source File: Resource.tsx From datart with Apache License 2.0 | 4 votes |
Resource = memo(() => {
const t = useI18NPrefix('view.resource');
const dispatch = useDispatch();
const { editorCompletionItemProviderRef } = useContext(EditorContext);
const isDatabaseSchemaLoading = useSelector(selectDatabaseSchemaLoading);
const sourceId = useSelector<RootState>(state =>
selectCurrentEditingViewAttr(state, { name: 'sourceId' }),
) as string;
const databaseSchemas = useSelector(state =>
selectSourceDatabaseSchemas(state, { id: sourceId }),
);
const { height, ref: treeWrapperRef } = useResizeObserver({
refreshMode: 'debounce',
refreshRate: 200,
});
const buildTableNode = useCallback((database: DatabaseSchema) => {
const children =
database?.tables?.map(table => {
return buildTableColumnNode([database.dbName], table);
}) || [];
return buildAntdTreeNodeModel([], database.dbName, children, false);
}, []);
const buildTableColumnNode = (ancestors: string[] = [], table) => {
const children =
table?.columns?.map(column => {
return buildAntdTreeNodeModel(
ancestors.concat(table.tableName),
column?.name,
[],
true,
);
}) || [];
return buildAntdTreeNodeModel(ancestors, table.tableName, children, false);
};
const databaseTreeModel = useMemo(() => {
return (databaseSchemas || []).map(buildTableNode);
}, [buildTableNode, databaseSchemas]);
const { filteredData, onExpand, debouncedSearch, expandedRowKeys } =
useSearchAndExpand(
databaseTreeModel,
(keywords, data) => (data.title as string).includes(keywords),
DEFAULT_DEBOUNCE_WAIT,
true,
);
useEffect(() => {
if (databaseTreeModel && editorCompletionItemProviderRef) {
editorCompletionItemProviderRef.current?.dispose();
dispatch(
getEditorProvideCompletionItems({
sourceId,
resolve: getItem => {
editorCompletionItemProviderRef.current =
monaco.languages.registerCompletionItemProvider('sql', {
provideCompletionItems: getItem,
});
},
}),
);
}
}, [dispatch, sourceId, databaseTreeModel, editorCompletionItemProviderRef]);
const renderIcon = useCallback(({ value }) => {
if (Array.isArray(value)) {
switch (value.length) {
case 1:
return <DatabaseOutlined />;
case 2:
return <TableOutlined />;
}
} else {
switch (value.type as DataViewFieldType) {
case DataViewFieldType.STRING:
return <FieldStringOutlined />;
case DataViewFieldType.NUMERIC:
return <FieldNumberOutlined />;
case DataViewFieldType.DATE:
return <CalendarOutlined />;
}
}
}, []);
return (
<Container title="reference">
<Searchbar>
<Col span={24}>
<Input
prefix={<SearchOutlined className="icon" />}
placeholder={t('search')}
className="input"
bordered={false}
onChange={debouncedSearch}
/>
</Col>
</Searchbar>
<TreeWrapper ref={treeWrapperRef}>
<Tree
className="medium"
treeData={filteredData}
loading={isDatabaseSchemaLoading}
icon={renderIcon}
selectable={false}
defaultExpandedKeys={expandedRowKeys}
height={height}
onExpand={onExpand}
/>
</TreeWrapper>
</Container>
);
})