Skip to content
代码片段 群组 项目
未验证 提交 2b4a27bf 编辑于 作者: Sheldon Led's avatar Sheldon Led 提交者: GitLab
浏览文件

Add Pipelines app to conditionally render in CE

上级 b56ff6eb
No related branches found
No related tags found
无相关合并请求
...@@ -10,6 +10,7 @@ export const usageQuotasViewProvideData = { ...@@ -10,6 +10,7 @@ export const usageQuotasViewProvideData = {
export const storageTabMetadata = { export const storageTabMetadata = {
title: __('Storage'), title: __('Storage'),
component: NamespaceStorageApp, component: NamespaceStorageApp,
shouldRender: () => document.querySelector(STORAGE_TAB_METADATA_EL_SELECTOR),
}; };
export const usageQuotasTabsMetadata = [storageTabMetadata]; export const usageQuotasTabsMetadata = [storageTabMetadata];
...@@ -2,3 +2,5 @@ import { s__ } from '~/locale'; ...@@ -2,3 +2,5 @@ import { s__ } from '~/locale';
export const USAGE_BY_MONTH_HEADER = s__('UsageQuota|Usage by month'); export const USAGE_BY_MONTH_HEADER = s__('UsageQuota|Usage by month');
export const USAGE_BY_PROJECT_HEADER = s__('UsageQuota|Usage by project'); export const USAGE_BY_PROJECT_HEADER = s__('UsageQuota|Usage by project');
export const PIPELINES_TAB_METADATA_EL_SELECTOR = '#js-pipeline-usage-app';
import { __ } from '~/locale';
import { storageTabMetadata } from '~/usage_quotas/group_view_metadata'; import { storageTabMetadata } from '~/usage_quotas/group_view_metadata';
import { STORAGE_TAB_METADATA_EL_SELECTOR } from '~/usage_quotas/constants'; import { STORAGE_TAB_METADATA_EL_SELECTOR } from '~/usage_quotas/constants';
import PipelineUsageApp from './pipelines/components/app.vue';
import { parseProvideData as parseStorageTabProvideData } from './storage/utils'; import { parseProvideData as parseStorageTabProvideData } from './storage/utils';
import { parseProvideData as parsePipelinesTabProvideData } from './pipelines/utils';
import { PIPELINES_TAB_METADATA_EL_SELECTOR } from './constants';
export const usageQuotasViewProvideData = { export const usageQuotasViewProvideData = {
...parseStorageTabProvideData(document.querySelector(STORAGE_TAB_METADATA_EL_SELECTOR)), ...parseStorageTabProvideData(document.querySelector(STORAGE_TAB_METADATA_EL_SELECTOR)),
...parsePipelinesTabProvideData(document.querySelector(PIPELINES_TAB_METADATA_EL_SELECTOR)),
}; };
export const usageQuotasTabsMetadata = [storageTabMetadata]; const pipelineTabMetadata = {
title: __('Pipelines'),
component: PipelineUsageApp,
shouldRender: () => document.querySelector(PIPELINES_TAB_METADATA_EL_SELECTOR),
};
export const usageQuotasTabsMetadata = [pipelineTabMetadata, storageTabMetadata].filter((tab) =>
tab.shouldRender(),
);
import Vue from 'vue'; import Vue from 'vue';
import VueApollo from 'vue-apollo'; import VueApollo from 'vue-apollo';
import { parseBoolean } from '~/lib/utils/common_utils';
import apolloProvider from 'ee/usage_quotas/shared/provider'; import apolloProvider from 'ee/usage_quotas/shared/provider';
import { PIPELINES_TAB_METADATA_EL_SELECTOR } from '../constants';
import PipelineUsageApp from './components/app.vue'; import PipelineUsageApp from './components/app.vue';
import { parseProvideData } from './utils';
Vue.use(VueApollo); Vue.use(VueApollo);
export default () => { export default () => {
const el = document.getElementById('js-pipeline-usage-app'); const el = document.querySelector(PIPELINES_TAB_METADATA_EL_SELECTOR);
if (!el) { if (!el) {
return false; return false;
} }
const {
pageSize,
namespacePath,
namespaceId,
namespaceActualPlanName,
userNamespace,
ciMinutesAnyProjectEnabled,
ciMinutesDisplayMinutesAvailableData,
ciMinutesLastResetDate,
ciMinutesMonthlyMinutesLimit,
ciMinutesMonthlyMinutesUsed,
ciMinutesMonthlyMinutesUsedPercentage,
ciMinutesPurchasedMinutesLimit,
ciMinutesPurchasedMinutesUsed,
ciMinutesPurchasedMinutesUsedPercentage,
buyAdditionalMinutesPath,
buyAdditionalMinutesTarget,
} = el.dataset;
return new Vue({ return new Vue({
el, el,
name: 'PipelinesUsageView', name: 'PipelinesUsageView',
provide: { provide: parseProvideData(el),
pageSize: Number(pageSize),
namespacePath,
namespaceId,
namespaceActualPlanName,
userNamespace: parseBoolean(userNamespace),
ciMinutesAnyProjectEnabled: parseBoolean(ciMinutesAnyProjectEnabled),
ciMinutesDisplayMinutesAvailableData: parseBoolean(ciMinutesDisplayMinutesAvailableData),
ciMinutesLastResetDate,
// Limit and Usage could be a number or a string (e.g. `Unlimited`) so we shouldn't parse these
ciMinutesMonthlyMinutesLimit,
ciMinutesMonthlyMinutesUsed,
ciMinutesMonthlyMinutesUsedPercentage,
ciMinutesPurchasedMinutesLimit,
ciMinutesPurchasedMinutesUsed,
ciMinutesPurchasedMinutesUsedPercentage,
buyAdditionalMinutesPath,
buyAdditionalMinutesTarget,
},
apolloProvider, apolloProvider,
render(createElement) { render(createElement) {
return createElement(PipelineUsageApp); return createElement(PipelineUsageApp);
......
import { parseBoolean } from '~/lib/utils/common_utils';
import { dateToYearMonthDate, newDateAsLocaleTime } from '~/lib/utils/datetime_utility'; import { dateToYearMonthDate, newDateAsLocaleTime } from '~/lib/utils/datetime_utility';
const formatMonthData = (cur) => { const formatMonthData = (cur) => {
...@@ -53,3 +54,48 @@ export const formatIso8601Date = (year, monthIndex, day) => { ...@@ -53,3 +54,48 @@ export const formatIso8601Date = (year, monthIndex, day) => {
.map((s) => s.padStart(2, '0')) .map((s) => s.padStart(2, '0'))
.join('-'); .join('-');
}; };
export const parseProvideData = (el) => {
if (!el) {
return {};
}
const {
pageSize,
namespacePath,
namespaceId,
namespaceActualPlanName,
userNamespace,
ciMinutesAnyProjectEnabled,
ciMinutesDisplayMinutesAvailableData,
ciMinutesLastResetDate,
ciMinutesMonthlyMinutesLimit,
ciMinutesMonthlyMinutesUsed,
ciMinutesMonthlyMinutesUsedPercentage,
ciMinutesPurchasedMinutesLimit,
ciMinutesPurchasedMinutesUsed,
ciMinutesPurchasedMinutesUsedPercentage,
buyAdditionalMinutesPath,
buyAdditionalMinutesTarget,
} = el.dataset;
return {
pageSize: Number(pageSize),
namespacePath,
namespaceId,
namespaceActualPlanName,
userNamespace: parseBoolean(userNamespace),
ciMinutesAnyProjectEnabled: parseBoolean(ciMinutesAnyProjectEnabled),
ciMinutesDisplayMinutesAvailableData: parseBoolean(ciMinutesDisplayMinutesAvailableData),
ciMinutesLastResetDate,
// Limit and Usage could be a number or a string (e.g. `Unlimited`) so we shouldn't parse these
ciMinutesMonthlyMinutesLimit,
ciMinutesMonthlyMinutesUsed,
ciMinutesMonthlyMinutesUsedPercentage,
ciMinutesPurchasedMinutesLimit,
ciMinutesPurchasedMinutesUsed,
ciMinutesPurchasedMinutesUsedPercentage,
buyAdditionalMinutesPath,
buyAdditionalMinutesTarget,
};
};
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
- if Feature.enabled?(:usage_quotas_for_all_editions, @group) - if Feature.enabled?(:usage_quotas_for_all_editions, @group)
#js-usage-quotas-view{ data: { namespace_name: @group.name } } #js-usage-quotas-view{ data: { namespace_name: @group.name } }
#js-namespace-storage-app{ data: storage_usage_app_data(@group) } #js-namespace-storage-app{ data: storage_usage_app_data(@group) }
- if can? current_user, :admin_ci_minutes, @group
#js-pipeline-usage-app{ data: pipeline_usage_app_data(@group) }
- else - else
- if show_product_purchase_success_alert? - if show_product_purchase_success_alert?
= render 'product_purchase_success_alert', product_name: params[:purchased_product] = render 'product_purchase_success_alert', product_name: params[:purchased_product]
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册