Skip to content

Commit

Permalink
Merge pull request #1183 from concord-consortium/187807322-add-hide-q…
Browse files Browse the repository at this point in the history
…uestion-managed-interactive-override

feat: Add hide question number custom override [PT-187807322]
  • Loading branch information
dougmartin authored Oct 18, 2024
2 parents 553b5a8 + 88c0c67 commit 16d79e0
Show file tree
Hide file tree
Showing 9 changed files with 149 additions and 13 deletions.
54 changes: 52 additions & 2 deletions app/assets/javascripts/lara-typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -135602,7 +135602,9 @@ var CustomizeManagedInteractive = function (props) {
inherit_image_url = managedInteractive.inherit_image_url,
custom_image_url = managedInteractive.custom_image_url,
show_in_featured_question_report = managedInteractive.show_in_featured_question_report,
linked_interactive_item_id = managedInteractive.linked_interactive_item_id;
linked_interactive_item_id = managedInteractive.linked_interactive_item_id,
inherit_hide_question_number = managedInteractive.inherit_hide_question_number,
custom_hide_question_number = managedInteractive.custom_hide_question_number;

var _a = (0, react_1.useState)(inherit_aspect_ratio_method),
inheritAspectRatio = _a[0],
Expand Down Expand Up @@ -135640,6 +135642,14 @@ var CustomizeManagedInteractive = function (props) {
customImageUrl = _h[0],
setCustomImageUrl = _h[1];

var _j = (0, react_1.useState)(inherit_hide_question_number),
inheritHideQuestionNumber = _j[0],
setInheritHideQuestionNumber = _j[1];

var _k = (0, react_1.useState)(custom_hide_question_number),
customHideQuestionNumber = _k[0],
setCustomHideQuestionNumber = _k[1];

var handleBooleanOption = function (setter) {
return function (e) {
var value = !!(e.target.checked && e.target.value === "true");
Expand All @@ -135662,6 +135672,8 @@ var CustomizeManagedInteractive = function (props) {
var handleChangeCustomClickToPlay = handleBooleanOption(setCustomClickToPlay);
var handleChangeCustomClickToPlayPrompt = handleStringOption(setCustomClickToPlayPrompt);
var handleChangeCustomImageUrl = handleStringOption(setCustomImageUrl);
var handleChangeHideQuestionNumber = handleBooleanOption(setInheritHideQuestionNumber);
var handleChangeCustomHideQuestionNumber = handleBooleanOption(setCustomHideQuestionNumber);
var clickToPlayEnabled = inheritClickToPlay && libraryInteractive.click_to_play || !inheritClickToPlay && customClickToPlay;

var renderCommonFields = function () {
Expand Down Expand Up @@ -135839,7 +135851,44 @@ var CustomizeManagedInteractive = function (props) {
onChange: handleChangeCustomClickToPlay
}), React.createElement("label", {
htmlFor: "custom-click-to-play"
}, "Enabled")), clickToPlayEnabled && renderClickToPlayOptions()))));
}, "Enabled")), clickToPlayEnabled && renderClickToPlayOptions()))), libraryInteractive.enable_learner_state && React.createElement("fieldset", null, React.createElement("legend", null, "Hide Question Number"), React.createElement("div", {
className: "option_group"
}, React.createElement("div", {
className: "customizable-option"
}, React.createElement("input", {
type: "radio",
id: "inherit-hide-question-number",
name: "inherit_hide_question_number",
value: "true",
defaultChecked: inheritHideQuestionNumber,
onChange: handleChangeHideQuestionNumber
}), React.createElement("label", {
htmlFor: "inherit-hide-question-number",
className: "radioLabel"
}, "Use default: ", React.createElement("strong", null, libraryInteractive.hide_question_number ? "Enabled" : "Disabled"))), React.createElement("div", {
className: "customizable-option"
}, React.createElement("input", {
type: "radio",
id: "inherit-hide-question-number",
name: "inherit_hide_question_number",
value: "false",
defaultChecked: !inheritHideQuestionNumber,
onChange: handleChangeHideQuestionNumber
}), React.createElement("label", {
htmlFor: "inherit-hide-question-number",
className: "radioLabel"
}, "Customize"), !inheritHideQuestionNumber && React.createElement("div", {
className: "customizable-option-setting"
}, React.createElement("input", {
id: "custom-hide-question-number",
type: "checkbox",
name: "custom_hide_question_number",
value: "true",
defaultChecked: customHideQuestionNumber,
onChange: handleChangeCustomHideQuestionNumber
}), React.createElement("label", {
htmlFor: "custom-hide-question-number"
}, "Enabled"))))));
};

exports.CustomizeManagedInteractive = CustomizeManagedInteractive;
Expand Down Expand Up @@ -143444,6 +143493,7 @@ var ItemEditDialog = function (_a) {
case "inherit_image_url":
case "inherit_native_height":
case "inherit_native_width":
case "inherit_hide_question_number":
elementValue = handleBooleanElement(element);
break;

Expand Down
17 changes: 10 additions & 7 deletions app/models/managed_interactive.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ class ManagedInteractive < ActiveRecord::Base
:inherit_image_url, :custom_image_url,
:linked_interactive_item_id,
:legacy_ref_id,
:legacy_ref_type
:legacy_ref_type,
:inherit_hide_question_number, :custom_hide_question_number

default_value_for :custom_native_width, ASPECT_RATIO_DEFAULT_WIDTH
default_value_for :custom_native_height, ASPECT_RATIO_DEFAULT_HEIGHT
Expand Down Expand Up @@ -91,15 +92,15 @@ def image_url
inherit_image_url && library_interactive ? library_interactive.image_url : custom_image_url
end

def hide_question_number
inherit_hide_question_number && library_interactive ? library_interactive.hide_question_number : custom_hide_question_number
end

# getters for proxied attributes
def enable_learner_state
library_interactive ? library_interactive.enable_learner_state : false
end

def hide_question_number
library_interactive ? library_interactive.hide_question_number : false
end

def show_delete_data_button
library_interactive ? library_interactive.show_delete_data_button : true
end
Expand Down Expand Up @@ -151,7 +152,9 @@ def to_hash
inherit_image_url: inherit_image_url,
custom_image_url: custom_image_url,
linked_interactives: linked_interactives_list,
linked_interactive_item_id: linked_interactive_item_id
linked_interactive_item_id: linked_interactive_item_id,
inherit_hide_question_number: inherit_hide_question_number,
custom_hide_question_number: custom_hide_question_number
}
end

Expand All @@ -175,7 +178,7 @@ def to_authoring_preview_hash
# inherit_native_width, custom_native_width, inherit_native_height, custom_native_height,
# inherit_click_to_play, custom_click_to_play, inherit_full_window, custom_full_window,
# inherit_click_to_play_prompt, custom_click_to_play_prompt, inherit_image_url, custom_image_url,
# linked_interactives
# linked_interactives, inherit_hide_question_number, custom_question_number

def to_interactive
# NOTE: model_library_url is missing as there is no analog
Expand Down
6 changes: 6 additions & 0 deletions db/migrate/20241018134619_add_inherit_hide_question_number.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AddInheritHideQuestionNumber < ActiveRecord::Migration
def change
add_column :managed_interactives, :inherit_hide_question_number, :boolean, default: true
add_column :managed_interactives, :custom_hide_question_number, :boolean, default: false
end
end
4 changes: 3 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20241011123743) do
ActiveRecord::Schema.define(:version => 20241018134619) do

create_table "admin_events", :force => true do |t|
t.string "kind"
Expand Down Expand Up @@ -528,6 +528,8 @@
t.string "linked_interactive_type"
t.integer "legacy_ref_id"
t.string "legacy_ref_type"
t.boolean "inherit_hide_question_number", :default => true
t.boolean "custom_hide_question_number", :default => false
end

add_index "managed_interactives", ["legacy_ref_id", "legacy_ref_type"], :name => "managed_interactive_legacy_idx"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export interface ILibraryInteractive {
click_to_play_prompt: string;
description: string;
enable_learner_state: boolean;
hide_question_number: boolean;
export_hash: string;
full_window: boolean;
has_report_url: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ export const CustomizeManagedInteractive: React.FC<Props> = (props) => {
inherit_image_url,
custom_image_url,
show_in_featured_question_report,
linked_interactive_item_id
linked_interactive_item_id,
inherit_hide_question_number,
custom_hide_question_number
} = managedInteractive;

const [inheritAspectRatio, setInheritAspectRatio] = useState(inherit_aspect_ratio_method);
Expand All @@ -47,6 +49,8 @@ export const CustomizeManagedInteractive: React.FC<Props> = (props) => {
const [inheritFullWindow, setInheritFullWindow] = useState(inherit_full_window);
const [inheritImageUrl, setInheritImageUrl] = useState(inherit_image_url);
const [customImageUrl, setCustomImageUrl] = useState(custom_image_url);
const [inheritHideQuestionNumber, setInheritHideQuestionNumber] = useState(inherit_hide_question_number);
const [customHideQuestionNumber, setCustomHideQuestionNumber] = useState(custom_hide_question_number);

const handleBooleanOption = (setter: (value: boolean) => void) => {
return (e: React.ChangeEvent<HTMLInputElement>) => {
Expand All @@ -67,6 +71,8 @@ export const CustomizeManagedInteractive: React.FC<Props> = (props) => {
const handleChangeCustomClickToPlay = handleBooleanOption(setCustomClickToPlay);
const handleChangeCustomClickToPlayPrompt = handleStringOption(setCustomClickToPlayPrompt);
const handleChangeCustomImageUrl = handleStringOption(setCustomImageUrl);
const handleChangeHideQuestionNumber = handleBooleanOption(setInheritHideQuestionNumber);
const handleChangeCustomHideQuestionNumber = handleBooleanOption(setCustomHideQuestionNumber);

const clickToPlayEnabled = (inheritClickToPlay && libraryInteractive.click_to_play) ||
(!inheritClickToPlay && customClickToPlay);
Expand Down Expand Up @@ -317,5 +323,54 @@ export const CustomizeManagedInteractive: React.FC<Props> = (props) => {
</div>
</div>
</fieldset>

{libraryInteractive.enable_learner_state &&
<fieldset>
<legend>Hide Question Number</legend>
<div className="option_group">
<div className="customizable-option">
<input
type="radio"
id="inherit-hide-question-number"
name="inherit_hide_question_number"
value="true"
defaultChecked={inheritHideQuestionNumber}
onChange={handleChangeHideQuestionNumber}
/>
<label htmlFor="inherit-hide-question-number" className="radioLabel">
Use default: <strong>{libraryInteractive.hide_question_number ? "Enabled" : "Disabled"}</strong>
</label>
</div>
<div className="customizable-option">
<input
type="radio"
id="inherit-hide-question-number"
name="inherit_hide_question_number"
value="false"
defaultChecked={!inheritHideQuestionNumber}
onChange={handleChangeHideQuestionNumber}
/>
<label htmlFor="inherit-hide-question-number" className="radioLabel">
Customize
</label>
{!inheritHideQuestionNumber &&
<div className="customizable-option-setting">
<input
id="custom-hide-question-number"
type="checkbox"
name="custom_hide_question_number"
value="true"
defaultChecked={customHideQuestionNumber}
onChange={handleChangeCustomHideQuestionNumber}
/>
<label htmlFor="custom-hide-question-number">
Enabled
</label>
</div>
}
</div>
</div>
</fieldset>
}
</>;
};
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ export interface IManagedInteractive {
interactive_item_id: string;
linked_interactive_item_id: string;
linked_interactives: ILinkedInteractive[];
inherit_hide_question_number: boolean;
custom_hide_question_number: boolean;
}

export const ManagedInteractiveAuthoring: React.FC<Props> = (props) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ export const ItemEditDialog: React.FC<IItemEditDialogProps> = ({
case "inherit_image_url":
case "inherit_native_height":
case "inherit_native_width":
case "inherit_hide_question_number":
elementValue = handleBooleanElement((element as HTMLInputElement));
break;
case "library_interactive_id":
Expand Down
20 changes: 18 additions & 2 deletions spec/models/managed_interactive_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@
inherit_image_url: managed_interactive.inherit_image_url,
custom_image_url: managed_interactive.custom_image_url,
linked_interactives: [],
linked_interactive_item_id: nil
linked_interactive_item_id: nil,
inherit_hide_question_number: managed_interactive.inherit_hide_question_number,
custom_hide_question_number: managed_interactive.custom_hide_question_number,
}
expect(managed_interactive.to_hash).to eq(expected)
end
Expand Down Expand Up @@ -127,7 +129,9 @@
inherit_click_to_play_prompt: managed_interactive.inherit_click_to_play_prompt,
custom_click_to_play_prompt: managed_interactive.custom_click_to_play_prompt,
inherit_image_url: managed_interactive.inherit_image_url,
custom_image_url: managed_interactive.custom_image_url
custom_image_url: managed_interactive.custom_image_url,
inherit_hide_question_number: managed_interactive.inherit_hide_question_number,
custom_hide_question_number: managed_interactive.custom_hide_question_number,
})
end
end
Expand Down Expand Up @@ -297,6 +301,18 @@
expect(managed_interactive.click_to_play).to eq !library_interactive.click_to_play
end

it "returns hide_question_number" do
expect(managed_interactive.hide_question_number).to eq library_interactive.hide_question_number
managed_interactive.custom_hide_question_number = !library_interactive.hide_question_number
expect(managed_interactive.hide_question_number).to eq library_interactive.hide_question_number
managed_interactive.inherit_hide_question_number = false
expect(managed_interactive.hide_question_number).to eq !library_interactive.hide_question_number
managed_interactive.inherit_hide_question_number = true
expect(managed_interactive.hide_question_number).to eq library_interactive.hide_question_number
managed_interactive.library_interactive = nil
expect(managed_interactive.hide_question_number).to eq !library_interactive.hide_question_number
end

it "returns full_window" do
expect(managed_interactive.full_window).to eq library_interactive.full_window
managed_interactive.custom_full_window = !library_interactive.full_window
Expand Down

0 comments on commit 16d79e0

Please sign in to comment.