/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React, { useCallback } from 'react';
import { I18n } from '@coze-arch/i18n';
import { useProjectAuth, EProjectPermission } from '@coze-common/auth';
import { useUpdateProjectModal } from '@coze-studio/project-entity-adapter';
import {
useSpaceId,
useProjectId,
useCommitVersion,
} from '@coze-project-ide/framework';
import {
IconCozEdit,
IconCozCheckMarkCircleFillPalette,
} from '@coze-arch/coze-design/icons';
import {
CozAvatar,
Typography,
Skeleton,
IconButton,
Toast,
Popover,
} from '@coze-arch/coze-design';
import { useProjectInfo } from '../../../hooks';
import { InfoContent } from './info-content';
import styles from './styles.module.less';
const { Title: COZTitle } = Typography;
export const ProjectInfo = () => {
const {
loading,
initialValue,
projectInfo,
updateProjectInfo,
publishInfo,
ownerInfo,
} = useProjectInfo();
const spaceId = useSpaceId();
const projectId = useProjectId();
const { version } = useCommitVersion();
const { modalContextHolder, openModal } = useUpdateProjectModal({
onSuccess: () => {
updateProjectInfo();
// Update info
Toast.success(I18n.t('project_ide_toast_edit_success'));
},
});
const canAuthEdit = useProjectAuth(
EProjectPermission.EDIT_INFO,
projectId || '',
spaceId || '',
);
/**
* Editable judgment:
* 1. Have editing permission
* 2. Non-preview state
*/
const canEdit = canAuthEdit && !version;
// Open the project editing pop-up
const handleEditProject = useCallback(() => {
openModal({
initialValue,
});
}, [initialValue]);
const hasPublished = publishInfo?.has_published;
return loading ? (