crane-cloud/frontend

View on GitHub
src/components/ImageSettingsTab/index.jsx

Summary

Maintainability
A
35 mins
Test Coverage
F
0%
import BlackInputText from "../BlackInputText";
import Checkbox from "../Checkbox";
import Feedback from "../Feedback";
import PrimaryButton from "../PrimaryButton";
import Select from "../Select";
import Spinner from "../Spinner";

const ImageSettingsTab = ({
  app,
  error,
  loading,
  newImage,
  replicaOptions,
  isPrivateImage,
  togglePrivateImage,
  handleImageChange,
  handleSelectReplicas,
  handleDockerCredentialsChange,
  handleImageSectionSubmit,
}) => (
  <>
    <div className={`APPInstructions BigCard`}>
      <div className="ImageSection">
        <div className="APPButtonRow">
          <div className="AppLabel">Application Image</div>
          <div className="flexa">
            <BlackInputText
              className="settings-input"
              required
              placeholder={app?.image}
              name="newImage"
              value={newImage ? newImage : app?.image}
              onChange={handleImageChange}
            />
          </div>
        </div>

        <div className="APPButtonRow">
          <div className="AppLabel">Replicas</div>
          <div className="flexa">
            <div className="ReplicasSelect">
              <Select
                className="settings-input"
                placeholder={"App has " + app?.replicas + " replica(s)"}
                options={replicaOptions}
                onChange={(selectedOption) =>
                  handleSelectReplicas(selectedOption)
                }
              />
            </div>
          </div>
        </div>

        <div className="APPButtonRow">
          <div className="AppLabel">Private Image</div>
          <Checkbox
            isBlack
            onClick={togglePrivateImage}
            isChecked={isPrivateImage}
          />
        </div>
        {isPrivateImage && (
          <div className="PrivateImageTabContainer">
            <div index={1}>
              <div className="PrivateImageInputs">
                <div className="APPButtonRowName">
                  <div className="AppLabel">Username</div>
                  <div className="flexa">
                    <BlackInputText
                      required
                      className="sub-input"
                      placeholder={app?.username ? app?.username : "Username"}
                      name="username"
                      onChange={handleDockerCredentialsChange}
                    />
                  </div>
                </div>
                <div className="APPButtonRowEmail">
                  <div className="AppLabel">Email</div>
                  <div className="flexa">
                    <BlackInputText
                      required
                      className="sub-input-email"
                      placeholder={app.email ? app.email : "Email"}
                      name="email"
                      onChange={handleDockerCredentialsChange}
                    />
                  </div>
                </div>
                <div className="APPButtonRow">
                  <div className="AppLabel">Password</div>
                  <div className="flexa">
                    <BlackInputText
                      required
                      className="sub-input"
                      placeholder={app.password ? app.password : "Password"}
                      name="password"
                      onChange={handleDockerCredentialsChange}
                    />
                  </div>
                </div>
                <div className="APPButtonRowRegistry">
                  <div className="AppLabel">Registry Server</div>
                  <div className="flexa">
                    <BlackInputText
                      required
                      className="sub-input"
                      placeholder="Registry Server"
                      name="server"
                      onChange={handleDockerCredentialsChange}
                    />
                  </div>
                </div>
              </div>
            </div>
          </div>
        )}

        {error && <Feedback type="error" message={error} />}

        <div className="APPButton">
          <div className="UpperSection">
            <PrimaryButton
              disabled={loading}
              className={loading && "deactivatedBtn"}
              onClick={handleImageSectionSubmit}
            >
              {loading ? <Spinner /> : "Update"}
            </PrimaryButton>
          </div>
        </div>
      </div>
    </div>
  </>
);

export default ImageSettingsTab;