diff --git a/.github/workflows/build-aio-base.yml b/.github/workflows/build-aio-base.yml index f403cbe620..301fd8766a 100644 --- a/.github/workflows/build-aio-base.yml +++ b/.github/workflows/build-aio-base.yml @@ -2,6 +2,11 @@ name: Build AIO Base Image on: workflow_dispatch: + inputs: + base_tag_name: + description: 'Base Tag Name' + required: false + default: '' env: TARGET_BRANCH: ${{ github.ref_name }} @@ -22,27 +27,29 @@ jobs: - id: set_env_variables name: Set Environment Variables run: | + echo "TARGET_BRANCH=${{ env.TARGET_BRANCH }}" >> $GITHUB_OUTPUT + + if [ "${{ github.event.inputs.base_tag_name }}" != "" ]; then + echo "IMAGE_TAG=${{ github.event.inputs.base_tag_name }}" >> $GITHUB_OUTPUT + elif [ "${{ env.TARGET_BRANCH }}" == "master" ]; then + echo "IMAGE_TAG=latest" >> $GITHUB_OUTPUT + elif [ "${{ env.TARGET_BRANCH }}" == "preview" ]; then + echo "IMAGE_TAG=preview" >> $GITHUB_OUTPUT + else + echo "IMAGE_TAG=develop" >> $GITHUB_OUTPUT + fi + + if [ "${{ env.TARGET_BRANCH }}" == "master" ]; then echo "BUILDX_DRIVER=cloud" >> $GITHUB_OUTPUT echo "BUILDX_VERSION=lab:latest" >> $GITHUB_OUTPUT echo "BUILDX_PLATFORMS=linux/amd64,linux/arm64" >> $GITHUB_OUTPUT echo "BUILDX_ENDPOINT=makeplane/plane-dev" >> $GITHUB_OUTPUT - echo "TARGET_BRANCH=${{ env.TARGET_BRANCH }}" >> $GITHUB_OUTPUT - - echo "IMAGE_TAG=latest" >> $GITHUB_OUTPUT else echo "BUILDX_DRIVER=docker-container" >> $GITHUB_OUTPUT echo "BUILDX_VERSION=latest" >> $GITHUB_OUTPUT echo "BUILDX_PLATFORMS=linux/amd64" >> $GITHUB_OUTPUT echo "BUILDX_ENDPOINT=" >> $GITHUB_OUTPUT - - if [ "${{ env.TARGET_BRANCH }}" == "preview" ]; then - echo "TARGET_BRANCH=preview" >> $GITHUB_OUTPUT - echo "IMAGE_TAG=preview" >> $GITHUB_OUTPUT - else - echo "TARGET_BRANCH=develop" >> $GITHUB_OUTPUT - echo "IMAGE_TAG=develop" >> $GITHUB_OUTPUT - fi fi - id: checkout_files @@ -54,7 +61,6 @@ jobs: needs: [base_build_setup] env: BASE_IMG_TAG: makeplane/plane-aio-base:full-${{ needs.base_build_setup.outputs.image_tag }} - TARGET_BRANCH: ${{ needs.base_build_setup.outputs.gh_branch_name }} BUILDX_DRIVER: ${{ needs.base_build_setup.outputs.gh_buildx_driver }} BUILDX_VERSION: ${{ needs.base_build_setup.outputs.gh_buildx_version }} BUILDX_PLATFORMS: ${{ needs.base_build_setup.outputs.gh_buildx_platforms }} @@ -96,7 +102,6 @@ jobs: needs: [base_build_setup] env: BASE_IMG_TAG: makeplane/plane-aio-base:slim-${{ needs.base_build_setup.outputs.image_tag }} - TARGET_BRANCH: ${{ needs.base_build_setup.outputs.gh_branch_name }} BUILDX_DRIVER: ${{ needs.base_build_setup.outputs.gh_buildx_driver }} BUILDX_VERSION: ${{ needs.base_build_setup.outputs.gh_buildx_version }} BUILDX_PLATFORMS: ${{ needs.base_build_setup.outputs.gh_buildx_platforms }} diff --git a/.github/workflows/build-aio-branch.yml b/.github/workflows/build-aio-branch.yml index 6359dfe38c..de68d4b96d 100644 --- a/.github/workflows/build-aio-branch.yml +++ b/.github/workflows/build-aio-branch.yml @@ -13,6 +13,10 @@ on: type: boolean required: false default: false + base_tag_name: + description: 'Base Tag Name' + required: false + default: '' release: types: [released, prereleased] @@ -52,7 +56,9 @@ jobs: echo "BUILDX_PLATFORMS=linux/amd64" >> $GITHUB_OUTPUT echo "BUILDX_ENDPOINT=" >> $GITHUB_OUTPUT - if [ "${{ env.TARGET_BRANCH }}" == "preview" ]; then + if [ "${{ github.event.inputs.base_tag_name }}" != "" ]; then + echo "AIO_BASE_TAG=${{ github.event.inputs.base_tag_name }}" >> $GITHUB_OUTPUT + elif [ "${{ env.TARGET_BRANCH }}" == "preview" ]; then echo "AIO_BASE_TAG=preview" >> $GITHUB_OUTPUT else echo "AIO_BASE_TAG=develop" >> $GITHUB_OUTPUT diff --git a/.github/workflows/feature-deployment.yml b/.github/workflows/feature-deployment.yml index 1abe0af196..0c71564e12 100644 --- a/.github/workflows/feature-deployment.yml +++ b/.github/workflows/feature-deployment.yml @@ -2,6 +2,11 @@ name: Feature Preview on: workflow_dispatch: + inputs: + base_tag_name: + description: 'Base Tag Name' + required: false + default: 'preview' env: TARGET_BRANCH: ${{ github.ref_name }} @@ -29,7 +34,12 @@ jobs: echo "BUILDX_VERSION=latest" >> $GITHUB_OUTPUT echo "BUILDX_PLATFORMS=linux/amd64" >> $GITHUB_OUTPUT echo "BUILDX_ENDPOINT=" >> $GITHUB_OUTPUT - echo "AIO_BASE_TAG=develop" >> $GITHUB_OUTPUT + + if [ "${{ github.event.inputs.base_tag_name }}" != "" ]; then + echo "AIO_BASE_TAG=${{ github.event.inputs.base_tag_name }}" >> $GITHUB_OUTPUT + else + echo "AIO_BASE_TAG=develop" >> $GITHUB_OUTPUT + fi echo "TARGET_BRANCH=${{ env.TARGET_BRANCH }}" >> $GITHUB_OUTPUT diff --git a/web/app/[workspaceSlug]/(projects)/active-cycles/page.tsx b/web/app/[workspaceSlug]/(projects)/active-cycles/page.tsx index a4663d50f8..f1b3893830 100644 --- a/web/app/[workspaceSlug]/(projects)/active-cycles/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/active-cycles/page.tsx @@ -3,9 +3,10 @@ import { observer } from "mobx-react"; // components import { PageHead } from "@/components/core"; -import { WorkspaceActiveCyclesList } from "@/components/workspace"; // hooks import { useWorkspace } from "@/hooks/store"; +// plane web components +import { WorkspaceActiveCyclesRoot } from "@/plane-web/components/active-cycles"; const WorkspaceActiveCyclesPage = observer(() => { const { currentWorkspace } = useWorkspace(); @@ -15,7 +16,7 @@ const WorkspaceActiveCyclesPage = observer(() => { return ( <> - + ); }); diff --git a/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx index 2855cc129a..f29e6ff284 100644 --- a/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx @@ -20,7 +20,7 @@ import { ISSUE_LAYOUTS, } from "@/constants/issue"; // helpers -import { calculateTotalFilters } from "@/helpers/filter.helper"; +import { isIssueFilterActive } from "@/helpers/filter.helper"; // hooks import { useIssues, useLabel } from "@/hooks/store"; @@ -108,8 +108,6 @@ export const ProfileIssuesMobileHeader = observer(() => { [workspaceSlug, updateFilters, userId] ); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
{ } - isFiltersApplied={isFiltersApplied} + isFiltersApplied={isIssueFilterActive(issueFilters)} > { const canUserCreateIssue = currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; const issuesCount = getGroupIssueCount(undefined, undefined, false); return ( @@ -248,7 +247,11 @@ export const CycleIssuesHeader: React.FC = observer(() => { onChange={(layout) => handleLayoutChange(layout)} selectedLayout={activeLayout} /> - + { [workspaceSlug, projectId, cycleId, updateFilters] ); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return ( <> { } - isFiltersApplied={isFiltersApplied} + isFiltersApplied={isIssueFilterActive(issueFilters)} > { : currentProjectDetails.draft_issues : undefined; - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
@@ -140,7 +138,7 @@ export const ProjectDraftIssueHeader: FC = observer(() => { onChange={(layout) => handleLayoutChange(layout)} selectedLayout={activeLayout} /> - + { const canUserCreateIssue = currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; const issuesCount = getGroupIssueCount(undefined, undefined, false); return ( @@ -193,7 +192,7 @@ export const ProjectIssuesHeader = observer(() => { onChange={(layout) => handleLayoutChange(layout)} selectedLayout={activeLayout} /> - + { [workspaceSlug, projectId, updateFilters] ); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return ( <> { } - isFiltersApplied={isFiltersApplied} + isFiltersApplied={isIssueFilterActive(issueFilters)} > { const canUserCreateIssue = currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; const issuesCount = getGroupIssueCount(undefined, undefined, false); return ( @@ -249,7 +248,11 @@ export const ModuleIssuesHeader: React.FC = observer(() => { onChange={(layout) => handleLayoutChange(layout)} selectedLayout={activeLayout} /> - + { [workspaceSlug, projectId, moduleId, updateFilters] ); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
{ } - isFiltersApplied={isFiltersApplied} + isFiltersApplied={isIssueFilterActive(issueFilters)} > { const canUserCreateIssue = currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
@@ -233,7 +231,7 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { title="Filters" placement="bottom-end" disabled={!canUserCreateIssue} - isFiltersApplied={isFiltersApplied} + isFiltersApplied={isIssueFilterActive(issueFilters)} > { const isAuthorizedUser = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; const isLocked = viewDetails?.is_locked; return ( @@ -118,7 +117,11 @@ export const GlobalIssuesHeader = observer(() => {
{!isLocked && ( <> - + ; diff --git a/web/core/components/workspace/workspace-active-cycles-upgrade.tsx b/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx similarity index 100% rename from web/core/components/workspace/workspace-active-cycles-upgrade.tsx rename to web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx diff --git a/web/core/components/dropdowns/estimate.tsx b/web/core/components/dropdowns/estimate.tsx index 13c7ee94d9..8b14a5c73a 100644 --- a/web/core/components/dropdowns/estimate.tsx +++ b/web/core/components/dropdowns/estimate.tsx @@ -236,7 +236,14 @@ export const EstimateDropdown: React.FC = observer((props) => { {({ active, selected }) => (
{option.content} {selected && } diff --git a/web/core/components/issues/archived-issues-header.tsx b/web/core/components/issues/archived-issues-header.tsx index 80daadfee4..3926f08720 100644 --- a/web/core/components/issues/archived-issues-header.tsx +++ b/web/core/components/issues/archived-issues-header.tsx @@ -9,7 +9,7 @@ import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/com // constants import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "@/constants/issue"; // helpers -import { calculateTotalFilters } from "@/helpers/filter.helper"; +import { isIssueFilterActive } from "@/helpers/filter.helper"; // hooks import { useIssues, useLabel, useMember, useProject, useProjectState } from "@/hooks/store"; @@ -63,8 +63,6 @@ export const ArchivedIssuesHeader: FC = observer(() => { updateFilters(workspaceSlug.toString(), projectId.toString(), EIssueFilterType.DISPLAY_PROPERTIES, property); }; - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
@@ -72,7 +70,7 @@ export const ArchivedIssuesHeader: FC = observer(() => {
{/* filter options */}
- + { // hooks const { issuesFilter } = useIssues(EIssuesStoreType.PROJECT_VIEW); - useSWR( + const { isLoading } = useSWR( workspaceSlug && projectId && viewId ? `PROJECT_VIEW_ISSUES_${workspaceSlug}_${projectId}_${viewId}` : null, async () => { if (workspaceSlug && projectId && viewId) { @@ -56,6 +57,14 @@ export const ProjectViewLayoutRoot: React.FC = observer(() => { if (!workspaceSlug || !projectId || !viewId) return <>; + if (isLoading) { + return ( +
+ +
+ ); + } + return (
diff --git a/web/core/components/profile/profile-issues-filter.tsx b/web/core/components/profile/profile-issues-filter.tsx index cbacf33c63..aaaa153613 100644 --- a/web/core/components/profile/profile-issues-filter.tsx +++ b/web/core/components/profile/profile-issues-filter.tsx @@ -6,9 +6,14 @@ import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOption // components import { DisplayFiltersSelection, FilterSelection, FiltersDropdown, LayoutSelection } from "@/components/issues"; // constants -import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT, EIssueLayoutTypes } from "@/constants/issue"; +import { + EIssuesStoreType, + EIssueFilterType, + ISSUE_DISPLAY_FILTERS_BY_LAYOUT, + EIssueLayoutTypes, +} from "@/constants/issue"; // helpers -import { calculateTotalFilters } from "@/helpers/filter.helper"; +import { isIssueFilterActive } from "@/helpers/filter.helper"; // hooks import { useIssues, useLabel } from "@/hooks/store"; @@ -95,8 +100,6 @@ export const ProfileIssuesFilter = observer(() => { [workspaceSlug, updateFilters, userId] ); - const isFiltersApplied = calculateTotalFilters(issueFilters?.filters ?? {}) !== 0; - return (
{ selectedLayout={activeLayout} /> - + { )} {isDraftButtonOpen && ( -
+