• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mendersoftware / gui / 1113439055

19 Dec 2023 09:01PM UTC coverage: 82.752% (-17.2%) from 99.964%
1113439055

Pull #4258

gitlab-ci

mender-test-bot
chore: Types update

Signed-off-by: Mender Test Bot <mender@northern.tech>
Pull Request #4258: chore: Types update

4326 of 6319 branches covered (0.0%)

8348 of 10088 relevant lines covered (82.75%)

189.39 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.89
/src/js/components/common/enterpriseNotification.js
1
// Copyright 2019 Northern.tech AS
2
//
3
//    Licensed under the Apache License, Version 2.0 (the "License");
4
//    you may not use this file except in compliance with the License.
5
//    You may obtain a copy of the License at
6
//
7
//        http://www.apache.org/licenses/LICENSE-2.0
8
//
9
//    Unless required by applicable law or agreed to in writing, software
10
//    distributed under the License is distributed on an "AS IS" BASIS,
11
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
//    See the License for the specific language governing permissions and
13
//    limitations under the License.
14
import React, { useState } from 'react';
15
import { useSelector } from 'react-redux';
16
import { Link } from 'react-router-dom';
17

18
import { Chip } from '@mui/material';
19
import { withStyles } from 'tss-react/mui';
20

21
import { ADDONS, BENEFITS, PLANS } from '../../constants/appConstants';
22
import { getTenantCapabilities } from '../../selectors';
23
import MenderTooltip, { MenderTooltipClickable } from './mendertooltip';
24

25
const PlansTooltip = withStyles(MenderTooltip, ({ palette }) => ({
1,395✔
26
  arrow: {
27
    color: palette.tooltip.tierTipBackground
28
  },
29
  tooltip: {
30
    backgroundColor: palette.tooltip.tierTipBackground,
31
    maxWidth: 300
32
  }
33
}));
34

35
const PlanChip = withStyles(Chip, ({ palette }) => ({
183✔
36
  root: {
37
    backgroundColor: palette.tooltip.tierTipBackground,
38
    color: palette.text.disabled,
39
    textTransform: 'uppercase',
40
    '&:hover': {
41
      fontWeight: 'bold'
42
    }
43
  }
44
}));
45

46
export const DefaultUpgradeNotification = props => (
183✔
47
  <div {...props}>
×
48
    This feature is not available on your plan. <Link to="/settings/upgrade">Upgrade</Link> to enable it
49
  </div>
50
);
51

52
const EnterpriseNotification = ({ className = '', id = BENEFITS.default.id }) => {
183✔
53
  const [isOpen, setIsOpen] = useState(false);
2,193✔
54
  const tenantCapabilities = useSelector(getTenantCapabilities);
2,193✔
55
  const { isEnterprise, plan: currentPlan } = tenantCapabilities;
2,193✔
56
  const { benefit, requiredAddon = '', requiredPlan = PLANS.os.id } = BENEFITS[id];
2,193✔
57
  const hasAddon = requiredAddon ? ADDONS[requiredAddon].needs.every(need => tenantCapabilities[need]) : false;
2,193✔
58

59
  const currentPlanIndex = Object.keys(PLANS).indexOf(currentPlan);
2,193✔
60
  const requiredPlanIndex = Object.keys(PLANS).indexOf(requiredPlan);
2,193✔
61
  const shouldShow = requiredPlanIndex > currentPlanIndex;
2,193✔
62
  // we have to explicitly check for the plan requirement here, since the default value prevents us from relying on the `shouldShow` result
63
  if (isEnterprise || (BENEFITS[id].requiredPlan && !shouldShow) || (requiredAddon && hasAddon)) {
2,193✔
64
    return null;
799✔
65
  }
66
  const content = requiredAddon ? (
1,394✔
67
    <>
68
      Add the <b>{ADDONS[requiredAddon].title}</b> add-on to {benefit}.
69
    </>
70
  ) : (
71
    <>
72
      Upgrade to the <b>{PLANS[requiredPlan].name}</b> plan {requiredPlanIndex === Object.keys(PLANS).length - 1 ? '' : 'or higher '}to gain access to {benefit}
1,350✔
73
      .
74
    </>
75
  );
76
  return (
1,394✔
77
    <MenderTooltipClickable
78
      onOpenChange={setIsOpen}
79
      title={
80
        <div>
81
          {content}
82
          <div className="flexbox space-between margin-top-small">
83
            <Link to="/settings/upgrade">Upgrade now</Link>
84
            <span className="link" onClick={() => setIsOpen(false)}>
×
85
              Close
86
            </span>
87
          </div>
88
        </div>
89
      }
90
      tooltipComponent={PlansTooltip}
91
      visibility={isOpen}
92
    >
93
      <PlanChip className={className} label={PLANS[requiredPlan].name} />
94
    </MenderTooltipClickable>
95
  );
96
};
97

98
export default EnterpriseNotification;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc