diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6054f981be4..2f8093d94f6 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "7.39.0" + ".": "7.39.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a7739ff7b5..6654a361cd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,32 @@ This project adheres to [Semantic Versioning](http://semver.org/). This CHANGELOG follows conventions [outlined here](http://keepachangelog.com/). +## [7.39.3](https://github.com/ParabolInc/parabol/compare/v7.39.2...v7.39.3) (2024-07-25) + + +### Changed + +* **rethinkdb:** TemplateScale: One-shot ([#10021](https://github.com/ParabolInc/parabol/issues/10021)) ([0c6c8e7](https://github.com/ParabolInc/parabol/commit/0c6c8e79dfbbac93362b3db640b008e32ba701b3)) + +## [7.39.2](https://github.com/ParabolInc/parabol/compare/v7.39.1...v7.39.2) (2024-07-24) + + +### Fixed + +* bump pm2 version ([#10027](https://github.com/ParabolInc/parabol/issues/10027)) ([0bb8ead](https://github.com/ParabolInc/parabol/commit/0bb8ead2adc52f64ad30ef57891791e1b3dd4ac1)) + + +### Changed + +* **rethinkdb:** TeamMember: Phase 3 ([#10003](https://github.com/ParabolInc/parabol/issues/10003)) ([73a5881](https://github.com/ParabolInc/parabol/commit/73a5881709f9345767c2a233cbe28716b6c3b8e1)) + +## [7.39.1](https://github.com/ParabolInc/parabol/compare/v7.39.0...v7.39.1) (2024-07-23) + + +### Changed + +* **rethinkdb:** TeamMember: Phase 2 ([#9993](https://github.com/ParabolInc/parabol/issues/9993)) ([90de32f](https://github.com/ParabolInc/parabol/commit/90de32f702849a92be28dff42188445947a54325)) + ## [7.39.0](https://github.com/ParabolInc/parabol/compare/v7.38.11...v7.39.0) (2024-07-23) diff --git a/codegen.json b/codegen.json index 99f5a4b9baf..00dd488587c 100644 --- a/codegen.json +++ b/codegen.json @@ -111,7 +111,10 @@ "NotifyTaskInvolves": "../../database/types/NotificationTaskInvolves#default", "NotifyTeamArchived": "../../database/types/NotificationTeamArchived#default", "Organization": "./types/Organization#OrganizationSource", - "OrganizationUser": "../../postgres/types/index#OrganizationUser", + "TemplateScaleValue": "./types/TemplateScaleValue#TemplateScaleValueSource as TemplateScaleValueSourceDB", + "TemplateScale": "../../postgres/types/index#TemplateScale as TemplateScaleDB", + "TemplateScaleRef": "../../postgres/types/index#TemplateScaleRef as TemplateScaleRefDB", + "OrganizationUser": "../../postgres/types/index#OrganizationUser as OrganizationUserDB", "PokerMeeting": "../../database/types/MeetingPoker#default as MeetingPoker", "PokerMeetingMember": "../../database/types/MeetingPokerMeetingMember#default as PokerMeetingMemberDB", "PokerTemplate": "../../database/types/PokerTemplate#default as PokerTemplateDB", @@ -145,7 +148,7 @@ "TeamHealthPhase": "./types/TeamHealthPhase#TeamHealthPhaseSource", "TeamHealthStage": "./types/TeamHealthStage#TeamHealthStageSource", "TeamInvitation": "../../database/types/TeamInvitation#default", - "TeamMember": "../../database/types/TeamMember#default as TeamMemberDB", + "TeamMember": "../../postgres/types/index#TeamMember as TeamMember", "TeamMemberIntegrationAuthWebhook": "../../postgres/queries/getTeamMemberIntegrationAuth#TeamMemberIntegrationAuth", "TeamMemberIntegrationAuthOAuth1": "../../postgres/queries/getTeamMemberIntegrationAuth#TeamMemberIntegrationAuth", "TeamMemberIntegrationAuthOAuth2": "../../postgres/queries/getTeamMemberIntegrationAuth#TeamMemberIntegrationAuth", diff --git a/package.json b/package.json index 7c1052a333a..94dd7ffa721 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "An open-source app for building smarter, more agile teams.", "author": "Parabol Inc. (http://github.com/ParabolInc)", "license": "AGPL-3.0", - "version": "7.39.0", + "version": "7.39.3", "repository": { "type": "git", "url": "https://github.com/ParabolInc/parabol" @@ -111,7 +111,7 @@ "minimist": "^1.2.5", "node-loader": "^2.0.0", "pg-promise": "^11.2.0", - "pm2": "^5.3.1", + "pm2": "^5.4.2", "postcss": "^8.4.21", "postcss-loader": "^7.0.2", "prettier": "^3.2.5", diff --git a/packages/chronos/package.json b/packages/chronos/package.json index c71da5ef114..a48ced587a5 100644 --- a/packages/chronos/package.json +++ b/packages/chronos/package.json @@ -1,6 +1,6 @@ { "name": "chronos", - "version": "7.39.0", + "version": "7.39.3", "description": "A cron job scheduler", "author": "Matt Krick ", "homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/chronos#readme", @@ -25,6 +25,6 @@ }, "dependencies": { "cron": "^2.3.1", - "parabol-server": "7.39.0" + "parabol-server": "7.39.3" } } diff --git a/packages/client/components/DashNavList/DashNavList.tsx b/packages/client/components/DashNavList/DashNavList.tsx index 33a61b06965..bda7d56a650 100644 --- a/packages/client/components/DashNavList/DashNavList.tsx +++ b/packages/client/components/DashNavList/DashNavList.tsx @@ -1,17 +1,14 @@ import styled from '@emotion/styled' +import {ManageAccounts} from '@mui/icons-material' import graphql from 'babel-plugin-relay/macro' import React from 'react' import {useFragment} from 'react-relay' -import {PALETTE} from '~/styles/paletteV3' import {DashNavList_organization$key} from '../../__generated__/DashNavList_organization.graphql' -import {TierEnum} from '../../__generated__/InvoiceHeader_invoice.graphql' -import useBreakpoint from '../../hooks/useBreakpoint' -import {Breakpoint} from '../../types/constEnums' -import {upperFirst} from '../../utils/upperFirst' -import LeftDashNavItem from '../Dashboard/LeftDashNavItem' -import BaseTag from '../Tag/BaseTag' +import {TierEnum} from '../../__generated__/OrganizationSubscription.graphql' +import {Tooltip} from '../../ui/Tooltip/Tooltip' +import {TooltipContent} from '../../ui/Tooltip/TooltipContent' +import {TooltipTrigger} from '../../ui/Tooltip/TooltipTrigger' import DashNavListTeams from './DashNavListTeams' -import DashNavMenu from './DashNavMenu' const EmptyTeams = styled('div')({ fontSize: 16, @@ -20,22 +17,13 @@ const EmptyTeams = styled('div')({ textAlign: 'center' }) -const StyledLeftDashNavItem = styled(LeftDashNavItem)<{isViewerOnTeam: boolean}>( - ({isViewerOnTeam}) => ({ - color: isViewerOnTeam ? PALETTE.SLATE_700 : PALETTE.SLATE_600, - borderRadius: 44, - paddingLeft: 15 - }) -) - -const Tag = styled(BaseTag)<{tier: TierEnum | null}>(({tier}) => ({ - backgroundColor: - tier === 'enterprise' ? PALETTE.SKY_500 : tier === 'team' ? PALETTE.GOLD_300 : PALETTE.JADE_400, - color: tier === 'team' ? PALETTE.GRAPE_700 : PALETTE.WHITE -})) +const StyledIcon = styled(ManageAccounts)({ + height: 18, + width: 18 +}) interface Props { - organizationsRef: DashNavList_organization$key | null + organizationsRef: DashNavList_organization$key onClick?: () => void } @@ -45,7 +33,6 @@ const DashNavList = (props: Props) => { graphql` fragment DashNavList_organization on Organization @relay(plural: true) { ...DashNavListTeams_organization - ...DashNavMenu_organization id name tier @@ -56,44 +43,42 @@ const DashNavList = (props: Props) => { `, organizationsRef ) - const isDesktop = useBreakpoint(Breakpoint.SIDEBAR_LEFT) - const teams = organizations?.flatMap((org) => org.viewerTeams) + + const TierEnumValues: TierEnum[] = ['enterprise', 'team', 'starter'] + + const sortedOrgs = organizations.toSorted((a, b) => { + const aTier = TierEnumValues.indexOf(a.tier) + const bTier = TierEnumValues.indexOf(b.tier) + return aTier < bTier ? -1 : aTier > bTier ? 1 : a.name.localeCompare(b.name) + }) + + const teams = organizations.flatMap((org) => org.viewerTeams) if (teams?.length === 0) { - return It appears you are not a member of any team! + return {'It appears you are not a member of any team!'} } return ( -
- {organizations?.map((org) => ( -
-
0 ? `border-b border-solid border-slate-300 p-2` : 'p-2' - } - > -
-
- - {org.name} - -
- {upperFirst(org.tier)} -
-
-
- {isDesktop ? ( - - ) : ( - - )} +
+ {sortedOrgs.map((org) => ( +
+
+ + {org.name} + + + + + + + + + {'Settings & Members'} + +
diff --git a/packages/client/components/DashNavList/DashNavListTeams.tsx b/packages/client/components/DashNavList/DashNavListTeams.tsx index 3c9e22099bb..560567cdb79 100644 --- a/packages/client/components/DashNavList/DashNavListTeams.tsx +++ b/packages/client/components/DashNavList/DashNavListTeams.tsx @@ -12,7 +12,7 @@ const StyledLeftDashNavItem = styled(LeftDashNavItem)<{isPublicTeams?: boolean}> ({isPublicTeams}) => ({ color: isPublicTeams ? PALETTE.SLATE_600 : PALETTE.SLATE_700, borderRadius: 44, - paddingLeft: 15 + paddingLeft: 16 }) ) @@ -61,7 +61,7 @@ const DashNavListTeams = (props: Props) => { if (!viewerTeams.length) return null return ( -
+
{viewerTeams.map((team) => { return ( { })} {publicTeamsCount > 0 && ( ( - ({isViewerOnTeam}) => ({ - color: isViewerOnTeam ? PALETTE.SLATE_700 : PALETTE.SLATE_600, - borderRadius: 44, - paddingLeft: 15 - }) -) - -type Props = { - organizationRef: DashNavMenu_organization$key -} - -const DashNavMenu = (props: Props) => { - const {organizationRef} = props - const history = useHistory() - const org = useFragment( - graphql` - fragment DashNavMenu_organization on Organization { - id - tier - } - `, - organizationRef - ) - const {id: orgId, tier} = org - const menuItems = [ - { - label: ( - <> - Plans & Billing{' '} - {tier === 'starter' && ( - <> - • Upgrade - - )} - - ), - href: `/me/organizations/${orgId}/billing` - }, - { - label: 'Teams', - href: `/me/organizations/${orgId}/teams` - }, - { - label: 'Members', - href: `/me/organizations/${orgId}/members` - }, - { - label: 'Organization Settings', - href: `/me/organizations/${orgId}/settings` - }, - { - label: 'Authentication', - href: `/me/organizations/${orgId}/authentication` - } - ] - - const handleMenuItemClick = (href: string) => { - history.push(href) - } - - return ( - - -
- } - > - - {menuItems.map((item) => ( - handleMenuItemClick(item.href)}> - {item.label} - - ))} - - - ) -} - -export default DashNavMenu diff --git a/packages/client/components/Dashboard/DashSidebar.tsx b/packages/client/components/Dashboard/DashSidebar.tsx index e919517f9e4..fb7ee5afdd9 100644 --- a/packages/client/components/Dashboard/DashSidebar.tsx +++ b/packages/client/components/Dashboard/DashSidebar.tsx @@ -4,7 +4,6 @@ import React from 'react' import {useFragment} from 'react-relay' import {useRouteMatch} from 'react-router' import {DashSidebar_viewer$key} from '../../__generated__/DashSidebar_viewer.graphql' -import {PALETTE} from '../../styles/paletteV3' import {NavSidebar} from '../../types/constEnums' import { AUTHENTICATION_PAGE, @@ -40,7 +39,7 @@ const NavMain = styled('div')({ const NavItem = styled(LeftDashNavItem)({ borderRadius: 44, - paddingLeft: 15 + paddingLeft: 16 }) const NavList = styled(DashNavList)({ @@ -56,14 +55,6 @@ const Wrapper = styled('div')({ flexDirection: 'column' }) -const OrgName = styled('div')({ - color: PALETTE.SLATE_600, - fontWeight: 600, - fontSize: 12, - lineHeight: '16px', - padding: '8px 16px' -}) - interface Props { isOpen: boolean viewerRef: DashSidebar_viewer$key | null @@ -107,7 +98,11 @@ const DashSidebar = (props: Props) => { label={'Organizations'} exact /> - {name} +
+ + {name} + +
{