fix: file fomat
This commit is contained in:
@@ -112,4 +112,4 @@ export enum IssueWebhookActions {
|
||||
UNLABELED = "unlabeled",
|
||||
UNLOCKED = "unlocked",
|
||||
UNPINNED = "unpinned",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ export class JiraImportOrchestrator implements TaskHandler {
|
||||
private readonly mq: MQ,
|
||||
private readonly store: Store,
|
||||
private readonly steps: IStep[]
|
||||
) { }
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Main task handler - called by worker
|
||||
|
||||
+1
-2
@@ -2,11 +2,10 @@ import { pullIssuesV2 } from "@plane/etl/jira";
|
||||
import { logger } from "@plane/logger";
|
||||
import type { TImportJob } from "@plane/types";
|
||||
import { createJiraClient } from "@/apps/jira-importer/helpers/migration-helpers";
|
||||
import type { TStepExecutionContext } from "@/apps/jira-server-importer/v2/types";
|
||||
import type { TStepExecutionContext, TJobContext } from "@/apps/jira-server-importer/v2/types";
|
||||
import { getJobCredentials } from "@/helpers/job";
|
||||
import { withCache } from "../../../../helpers/cache";
|
||||
import { buildExternalId } from "../../../../helpers/job";
|
||||
import type { TJobContext } from "../../../../types";
|
||||
import { JiraIssuesStep } from "../../shared/issues";
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@ export class JiraCyclesStep implements IStep {
|
||||
|
||||
private readonly PAGE_SIZE = 100;
|
||||
|
||||
constructor(private readonly source: E_IMPORTER_KEYS.JIRA_SERVER | E_IMPORTER_KEYS.JIRA) { }
|
||||
constructor(private readonly source: E_IMPORTER_KEYS.JIRA_SERVER | E_IMPORTER_KEYS.JIRA) {}
|
||||
|
||||
/**
|
||||
* Executes the sprint extraction process:
|
||||
@@ -67,7 +67,7 @@ export class JiraCyclesStep implements IStep {
|
||||
} catch (error) {
|
||||
logger.error(`[${jobContext.job.id}] [${this.name}] Step failed`, {
|
||||
jobId: jobContext.job.id,
|
||||
error: error
|
||||
error: error,
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
|
||||
+3
-3
@@ -57,7 +57,7 @@ export class JiraIssuesStep implements IStep {
|
||||
EJiraStep.ISSUE_PROPERTY_OPTIONS, // Provides options
|
||||
];
|
||||
|
||||
constructor(private readonly source: E_IMPORTER_KEYS.JIRA_SERVER | E_IMPORTER_KEYS.JIRA) { }
|
||||
constructor(private readonly source: E_IMPORTER_KEYS.JIRA_SERVER | E_IMPORTER_KEYS.JIRA) {}
|
||||
|
||||
private readonly PAGE_SIZE = 50;
|
||||
|
||||
@@ -554,8 +554,8 @@ export class JiraIssuesStep implements IStep {
|
||||
: null;
|
||||
return sprintObjects
|
||||
? sprintObjects
|
||||
.map((s) => (s ? buildExternalId(projectId, resourceId, s.id.toString()) : null))
|
||||
.filter((s) => s !== null)
|
||||
.map((s) => (s ? buildExternalId(projectId, resourceId, s.id.toString()) : null))
|
||||
.filter((s) => s !== null)
|
||||
: [];
|
||||
}
|
||||
|
||||
|
||||
@@ -28,18 +28,14 @@ export default defineConfig(() => ({
|
||||
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
||||
resolve: {
|
||||
alias: {
|
||||
"@atlaskit/pragmatic-drag-and-drop/combine": import.meta.resolve(
|
||||
"@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/combine.js"
|
||||
),
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll/element": import.meta.resolve(
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll/dist/esm/entry-point/element.js"
|
||||
),
|
||||
"@atlaskit/pragmatic-drag-and-drop/element/adapter": import.meta.resolve(
|
||||
"@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/element/adapter.js"
|
||||
),
|
||||
"@atlaskit/pragmatic-drag-and-drop/private/get-element-from-point-without-honey-pot": import.meta.resolve(
|
||||
"@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/private/get-element-from-point-without-honey-pot.js"
|
||||
),
|
||||
"@atlaskit/pragmatic-drag-and-drop/combine": import.meta
|
||||
.resolve("@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/combine.js"),
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll/element": import.meta
|
||||
.resolve("@atlaskit/pragmatic-drag-and-drop-auto-scroll/dist/esm/entry-point/element.js"),
|
||||
"@atlaskit/pragmatic-drag-and-drop/element/adapter": import.meta
|
||||
.resolve("@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/element/adapter.js"),
|
||||
"@atlaskit/pragmatic-drag-and-drop/private/get-element-from-point-without-honey-pot": import.meta
|
||||
.resolve("@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/private/get-element-from-point-without-honey-pot.js"),
|
||||
// Next.js compatibility shims used within space
|
||||
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
||||
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
||||
|
||||
@@ -6,7 +6,6 @@ import { SettingsHeader } from "@/components/settings/header";
|
||||
// plane web imports
|
||||
import { LicenseSeatsBanner } from "@/plane-web/components/license";
|
||||
|
||||
|
||||
export default function SettingsLayout() {
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -46,7 +46,7 @@ export const CommentQuickActions: FC<TCommentCard> = observer((props) => {
|
||||
handleDelete: () => activityOperations.removeComment(comment.id),
|
||||
});
|
||||
|
||||
if(MENU_ITEMS.length === 0) return null;
|
||||
if (MENU_ITEMS.length === 0) return null;
|
||||
|
||||
return (
|
||||
<CustomMenu ellipsis closeOnSelect>
|
||||
|
||||
@@ -279,4 +279,4 @@ export const ModuleForm: React.FC<Props> = (props) => {
|
||||
)}
|
||||
</form>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ type Props = {
|
||||
handleOnChange?: () => void;
|
||||
};
|
||||
|
||||
export function ModuleStatusSelect({ control, error, tabIndex , handleOnChange}: Props) {
|
||||
export function ModuleStatusSelect({ control, error, tabIndex, handleOnChange }: Props) {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Controller
|
||||
|
||||
@@ -10,4 +10,4 @@ export const useAnalyticsTabs = (workspaceSlug: string) => {
|
||||
const analyticsTabs = useMemo(() => getAnalyticsTabs(t, isAnalyticsTabsEnabled), [t, isAnalyticsTabsEnabled]);
|
||||
|
||||
return analyticsTabs;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -5,4 +5,3 @@ export * from "./navigation";
|
||||
export * from "./use-desktop-app";
|
||||
export * from "./helper";
|
||||
export * from "./sidebar-workspace-menu";
|
||||
|
||||
|
||||
@@ -23,15 +23,8 @@ type Props = {
|
||||
};
|
||||
|
||||
export const InitiativeLabelItem: React.FC<Props> = observer((props) => {
|
||||
const {
|
||||
label,
|
||||
handleLabelDelete,
|
||||
setIsUpdating,
|
||||
isParentDragging,
|
||||
isLastChild,
|
||||
onDrop,
|
||||
labelOperationsCallbacks,
|
||||
} = props;
|
||||
const { label, handleLabelDelete, setIsUpdating, isParentDragging, isLastChild, onDrop, labelOperationsCallbacks } =
|
||||
props;
|
||||
|
||||
// states
|
||||
const [isEditLabelForm, setEditLabelForm] = useState(false);
|
||||
|
||||
@@ -16,7 +16,6 @@ import type { TNavigationItem } from "@/components/navigation/tab-navigation-roo
|
||||
import { useFlag } from "@/plane-web/hooks/store";
|
||||
import { useProjectAdvanced } from "@/plane-web/hooks/store/projects/use-projects";
|
||||
|
||||
|
||||
type UseNavigationItemsProps = {
|
||||
workspaceSlug: string;
|
||||
projectId: string;
|
||||
@@ -35,7 +34,6 @@ export const useNavigationItems = ({
|
||||
project,
|
||||
allowPermissions,
|
||||
}: UseNavigationItemsProps): TNavigationItem[] => {
|
||||
|
||||
const isProjectOverviewEnabled = useFlag(workspaceSlug, "PROJECT_OVERVIEW");
|
||||
const { getProjectFeatures } = useProjectAdvanced();
|
||||
|
||||
@@ -43,8 +41,6 @@ export const useNavigationItems = ({
|
||||
|
||||
const isEpicsEnabled = projectFeatures?.is_epic_enabled;
|
||||
|
||||
|
||||
|
||||
// Base navigation items
|
||||
const baseNavigation = useCallback(
|
||||
(workspaceSlug: string, projectId: string): TNavigationItem[] => [
|
||||
|
||||
@@ -20,7 +20,9 @@ export const MovePageModalFooter: React.FC<Props> = (props) => {
|
||||
{t("common.cancel")}
|
||||
</Button>
|
||||
<Button variant="primary" size="sm" onClick={onMove} loading={isMoving} disabled={disabled}>
|
||||
{isMoving ? t("page_actions.move_page.submit_button.loading") : t("page_actions.move_page.submit_button.default")}
|
||||
{isMoving
|
||||
? t("page_actions.move_page.submit_button.loading")
|
||||
: t("page_actions.move_page.submit_button.default")}
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -26,7 +26,8 @@ export const AddRemovePreviewCard = observer((props: TProps) => {
|
||||
<span className="text-custom-text-100 font-medium">{data.parameters?.name}</span>{" "}
|
||||
{data.action === "add" ? "to" : "from"} {artifactSubType}
|
||||
{properties && properties.length > 0 ? "s" : ""}
|
||||
{properties && Array.isArray(properties) &&
|
||||
{properties &&
|
||||
Array.isArray(properties) &&
|
||||
properties.map(
|
||||
(
|
||||
property: {
|
||||
|
||||
@@ -127,7 +127,6 @@ export const ExtendedSidebarItem: FC<TExtendedSidebarItemProps> = observer((prop
|
||||
);
|
||||
}, [isLastChild, handleOnNavigationItemDrop, disableDrag, disableDrop, item.key]);
|
||||
|
||||
|
||||
const itemHref =
|
||||
item.key === "your_work"
|
||||
? `/${workspaceSlug.toString()}${item.href}${data?.id}`
|
||||
|
||||
@@ -26,8 +26,7 @@ export const AppRailVisibilityProvider = observer(({ children }: AppRailVisibili
|
||||
const subscriptionDetail = workspaceSubscription.currentWorkspaceSubscribedPlanDetail;
|
||||
|
||||
// EE Logic: Feature is NOT enabled for free self-managed workspaces
|
||||
const isFreeForSelfManaged =
|
||||
subscriptionDetail?.is_self_managed === true && subscriptionDetail?.product === "FREE";
|
||||
const isFreeForSelfManaged = subscriptionDetail?.is_self_managed === true && subscriptionDetail?.product === "FREE";
|
||||
|
||||
// Feature is enabled if:
|
||||
// 1. Feature flag is on AND
|
||||
|
||||
@@ -42,8 +42,7 @@ export abstract class AutomationBaseNode<
|
||||
T extends EAutomationNodeType,
|
||||
H extends TAutomationNodeHandlerName,
|
||||
C extends TAutomationNodeConfig,
|
||||
> implements IAutomationBaseNode<T, H, C>
|
||||
{
|
||||
> implements IAutomationBaseNode<T, H, C> {
|
||||
// node properties
|
||||
config: TAutomationNode<T, H, C>["config"];
|
||||
created_at: TAutomationNode<T, H, C>["created_at"];
|
||||
|
||||
@@ -62,10 +62,10 @@ export class CommandPaletteStore extends BaseCommandPaletteStore implements ICom
|
||||
get isAnyModalOpen(): boolean {
|
||||
return Boolean(
|
||||
super.getCoreModalsState() ||
|
||||
this.createUpdateTeamspaceModal.isOpen ||
|
||||
this.createUpdateTeamspaceViewModal.isOpen ||
|
||||
this.createUpdateInitiativeModal.isOpen ||
|
||||
this.createUpdateCustomerModal.isOpen
|
||||
this.createUpdateTeamspaceModal.isOpen ||
|
||||
this.createUpdateTeamspaceViewModal.isOpen ||
|
||||
this.createUpdateInitiativeModal.isOpen ||
|
||||
this.createUpdateCustomerModal.isOpen
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -242,10 +242,10 @@ export class InitiativeStore implements IInitiativeStore {
|
||||
get isAnyModalOpen() {
|
||||
return Boolean(
|
||||
this.initiativeLinks.isLinkModalOpen ||
|
||||
this.isInitiativeModalOpen ||
|
||||
this.isProjectsModalOpen ||
|
||||
this.isEpicModalOpen ||
|
||||
this.isAttachmentDeleteModalOpen
|
||||
this.isInitiativeModalOpen ||
|
||||
this.isProjectsModalOpen ||
|
||||
this.isEpicModalOpen ||
|
||||
this.isAttachmentDeleteModalOpen
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ export class PiChatAttachmentStore implements IPiChatAttachmentStore {
|
||||
} finally {
|
||||
// Cancel any pending debounced updates
|
||||
this.debouncedUpdateProgress.cancel();
|
||||
|
||||
|
||||
// Remove the attachment from upload status map
|
||||
runInAction(() => {
|
||||
if (this.attachmentsUploadStatusMap[chatId] && this.attachmentsUploadStatusMap[chatId][tempId]) {
|
||||
|
||||
@@ -19,8 +19,10 @@ export type TBaseTemplateInstanceProps<T extends TBaseTemplateWithData> = {
|
||||
baseTemplateData: T;
|
||||
};
|
||||
|
||||
export interface IBaseTemplateInstance<T extends TBaseTemplateWithData>
|
||||
extends TBaseTemplate<T["template_type"], T["template_data"]> {
|
||||
export interface IBaseTemplateInstance<T extends TBaseTemplateWithData> extends TBaseTemplate<
|
||||
T["template_type"],
|
||||
T["template_data"]
|
||||
> {
|
||||
// computed
|
||||
asJSON: T;
|
||||
asPublishableJSON: TPublishTemplateForm<T["template_type"], T["template_data"]>;
|
||||
|
||||
@@ -427,10 +427,9 @@ export const handleSelectionConversion = async (args: THandleSelectionConversion
|
||||
});
|
||||
await createTreePromise;
|
||||
|
||||
|
||||
// Show error/warning toast if there were any failures
|
||||
if (errors.length > 0) {
|
||||
const successCount = (workItemsToInsert.length || (mixedContentWorkItemId ? 1 : 0));
|
||||
const successCount = workItemsToInsert.length || (mixedContentWorkItemId ? 1 : 0);
|
||||
const failureCount = errors.length;
|
||||
|
||||
if (successCount > 0) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import type {
|
||||
Comment as JComment,
|
||||
IssueTypeDetails as JiraIssueTypeDetails,
|
||||
FieldDetails,
|
||||
Worklog
|
||||
Worklog,
|
||||
} from "jira.js/out/version2/models";
|
||||
import type {
|
||||
ImportedJiraUser,
|
||||
@@ -212,12 +212,10 @@ export const pullAllWorklogsForIssue = async (issue: IJiraIssue, client: JiraV2S
|
||||
"worklogs"
|
||||
);
|
||||
|
||||
return values.map(
|
||||
(worklog) => ({
|
||||
...worklog,
|
||||
issue_id: issue.id,
|
||||
})
|
||||
);
|
||||
return values.map((worklog) => ({
|
||||
...worklog,
|
||||
issue_id: issue.id,
|
||||
}));
|
||||
};
|
||||
|
||||
export async function pullCommentsForIssueV2(
|
||||
|
||||
@@ -10,8 +10,7 @@ import type {
|
||||
PlaneUser,
|
||||
ExIssuePropertyOption,
|
||||
} from "@plane/sdk";
|
||||
import type { TPropertyValuesPayload } from "@/core";
|
||||
import { E_IMPORTER_KEYS } from "@/core";
|
||||
import type { E_IMPORTER_KEYS, TPropertyValuesPayload } from "@/core";
|
||||
import {
|
||||
getFormattedDate,
|
||||
getPropertyAttributes,
|
||||
|
||||
@@ -168,7 +168,8 @@ export default {
|
||||
heading: "Intake-Verantwortung",
|
||||
notify_assignee: {
|
||||
title: "Zuständige benachrichtigen",
|
||||
description: "Für eine neue Intake-Anfrage werden die Standard-Zuständigen über Benachrichtigungen informiert",
|
||||
description:
|
||||
"Für eine neue Intake-Anfrage werden die Standard-Zuständigen über Benachrichtigungen informiert",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
@@ -776,7 +777,8 @@ export default {
|
||||
},
|
||||
authorization_grant_type: {
|
||||
title: "Verbindungstyp",
|
||||
description: "Wählen Sie, ob Ihre App einmal für den Arbeitsbereich installiert werden soll oder ob jeder Benutzer sein eigenes Konto verbinden soll",
|
||||
description:
|
||||
"Wählen Sie, ob Ihre App einmal für den Arbeitsbereich installiert werden soll oder ob jeder Benutzer sein eigenes Konto verbinden soll",
|
||||
},
|
||||
app_description_error: "App-Beschreibung ist erforderlich",
|
||||
app_slug_title: "App-Slug",
|
||||
@@ -838,7 +840,8 @@ export default {
|
||||
invalid_categories_error: "Ungültige Kategorien",
|
||||
categories_description: "Wählen Sie die Kategorien, die am besten zu der App passen",
|
||||
supported_plans: "Unterstützte Pläne",
|
||||
supported_plans_description: "Wählen Sie die Workspace-Pläne aus, die diese Anwendung installieren können. Leer lassen, um alle Pläne zu erlauben.",
|
||||
supported_plans_description:
|
||||
"Wählen Sie die Workspace-Pläne aus, die diese Anwendung installieren können. Leer lassen, um alle Pläne zu erlauben.",
|
||||
select_plans: "Pläne Auswählen",
|
||||
privacy_policy_url_title: "Datenschutzerklärung URL",
|
||||
privacy_policy_url_error: "Datenschutzerklärung URL ist erforderlich",
|
||||
|
||||
@@ -167,7 +167,8 @@ export default {
|
||||
heading: "Responsabilidad de ingreso",
|
||||
notify_assignee: {
|
||||
title: "Notificar asignados",
|
||||
description: "Para una nueva solicitud de ingreso, los asignados predeterminados serán alertados mediante notificaciones",
|
||||
description:
|
||||
"Para una nueva solicitud de ingreso, los asignados predeterminados serán alertados mediante notificaciones",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
|
||||
@@ -167,7 +167,8 @@ export default {
|
||||
heading: "Responsabilité d'ingestion",
|
||||
notify_assignee: {
|
||||
title: "Notifier les responsables",
|
||||
description: "Pour une nouvelle demande d'ingestion, les responsables par défaut seront alertés via des notifications",
|
||||
description:
|
||||
"Pour une nouvelle demande d'ingestion, les responsables par défaut seront alertés via des notifications",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
|
||||
@@ -168,7 +168,8 @@ export default {
|
||||
heading: "Tanggung jawab penerimaan",
|
||||
notify_assignee: {
|
||||
title: "Beritahu yang ditugaskan",
|
||||
description: "Untuk permintaan penerimaan baru, yang ditugaskan secara default akan diberi peringatan melalui notifikasi",
|
||||
description:
|
||||
"Untuk permintaan penerimaan baru, yang ditugaskan secara default akan diberi peringatan melalui notifikasi",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
|
||||
@@ -166,7 +166,8 @@ export default {
|
||||
heading: "Responsabilità di accettazione",
|
||||
notify_assignee: {
|
||||
title: "Notifica assegnatari",
|
||||
description: "Per una nuova richiesta di accettazione, gli assegnatari predefiniti saranno avvisati tramite notifiche",
|
||||
description:
|
||||
"Per una nuova richiesta di accettazione, gli assegnatari predefiniti saranno avvisati tramite notifiche",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
|
||||
@@ -168,7 +168,8 @@ export default {
|
||||
heading: "Responsabilidade de recebimento",
|
||||
notify_assignee: {
|
||||
title: "Notificar responsáveis",
|
||||
description: "Para uma nova solicitação de recebimento, os responsáveis padrão serão alertados via notificações",
|
||||
description:
|
||||
"Para uma nova solicitação de recebimento, os responsáveis padrão serão alertados via notificações",
|
||||
},
|
||||
toasts: {
|
||||
set: {
|
||||
|
||||
@@ -38,7 +38,7 @@ export class AIService extends APIService {
|
||||
* @returns {Promise<any>} The response data from the GPT task
|
||||
* @throws {Error} Throws the response error if the request fails
|
||||
*/
|
||||
async prompt(workspaceSlug: string, data: { prompt: string; task: string }): Promise<any> {
|
||||
async prompt(workspaceSlug: string, data: { prompt: string; task: string }): Promise<any> {
|
||||
return this.post(`/api/workspaces/${workspaceSlug}/ai-assistant/`, data)
|
||||
.then((response) => response?.data)
|
||||
.catch((error) => {
|
||||
|
||||
@@ -1 +1 @@
|
||||
export * from "./replies.service";
|
||||
export * from "./replies.service";
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
export * from "./sites-issue.service";
|
||||
export * from "./comments";
|
||||
export * from "./comments";
|
||||
|
||||
@@ -33,4 +33,4 @@ export interface IMilestoneInstance {
|
||||
// actions
|
||||
updateProgress: (progress: TMilestoneProgress) => void;
|
||||
update: (data: Partial<TMilestone>) => void;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,4 +8,4 @@ export * from "./state";
|
||||
export * from "./teamspace";
|
||||
export * from "./user";
|
||||
export * from "./work-item-type";
|
||||
export * from "./milestone";
|
||||
export * from "./milestone";
|
||||
|
||||
Reference in New Issue
Block a user